neb*_*ebs 13 singleton objective-c instancetype
据我所知,instancetype向编译器声明该方法的返回类型与接收消息的类相同.
传统上我总是声明我的单例初始值设定项,并将类名显式设置为返回类型:
@interface MyClass : NSObject
+ (MyClass *)sharedInstance;
@end
Run Code Online (Sandbox Code Playgroud)
现在我想知道我是否应该使用instancetype,如下所示:
@interface MyClass : NSObject
+ (instancetype)sharedInstance;
@end
Run Code Online (Sandbox Code Playgroud)
最后结果是一样的,我只是想知道是否有理由在这里使用其中一个?
CRD*_*CRD 18
instancetype对于涉及继承的情况很有用.考虑你有A从类继承的类B.一个B返回一个实例的方法B可以先声明为id,它的覆盖A可以返回一个实例A- 这一切都很好,但是编译器没有任何线索.但是,通过使用实例类型,编译器会被告知在A实例上调用该方法返回A实例时,可以提供更好的诊断,代码完成等.
现在在你的例子中你已经使用MyClass *而不是id,所以你已经告诉编译器类型了.您还有一个共享实例模型(不像其他实例那样是单例模型MyClass),您是否可能定义另一个继承MyClass并覆盖该sharedInstance方法的类?可能不是,但如果你这样做instancetype可能会有用,否则它什么也得不到.