メソッドの戻り値の型だけにつかえるキーワードみたいなもので
A method with a related result type can be declared by using the type instancetype as its result type. instancetype is a contextual keyword that is only permitted in the result type of an Objective-C method, e.g.
from http://clang.llvm.org/docs/LanguageExtensions.html#objective-c-features
@interface A + (instancetype)constructAnA; @end
使うメリットとしてはid型に比べてtype safeであることで 例えば
#import "A.h"
@implementation A
-(instancetype)funcA
{
return self;
}
@end
Aを継承したBでAではない型を返そうとした場合に
@implementation B
-(instancetype)funcA
{
return @[];
}
@end
このような場合とかにコンパイラがincompatible pointer castingのワーニングを吐くようになります。
なので暗黙的に返す型が決まっているような場合はidではなくinstancetypeを使ったほうがいいです。
参考