В версию 5.0 Xcode (LLVM 5/Clang 5) была добавлена поддержка нового ключевого слова для Objective-C — «instancetype».

Для чего оно нужно?

В соответствии с принятыми в Cocoa соглашениями наименования методов, Objective-C методы с названиями начинающимися с «init», «alloc», «copy», а также методы с названиями «new», «autorelease», «retain», «self» должны возвращать экземпляр класса которому они принадлежат. Такие методы возвращают связанный тип. Послав сообщение одному из этих методов, в ответ мы получим экземпляр класса, которому принадлежит метод.

Рассмотрим небольшой пример:

// Test Class 
@interface TestClass: NSObject
+(id) instance;
@end

@implementation TestClass
+ (id) instance {
    return [[self alloc] init];
}
@end

// Other Test Class
@interface OtherTestClass: TestClass
-(void) doSomething;
@end

@implementation OtherTestClass
-(void) doSomething {
    // ...
}
@end

В примере мы создали класс «TestClass», который реализует метод «instance», и унаследованный от него класс «OtherTestClass», реализующий метод «doSomething».… Читать дальше →