objective-c - 单例的实例类型与类名?

标签 objective-c singleton instancetype

据我了解,instancetype 向编译器声明该方法的返回类型与接收消息的类相同。

传统上,我总是声明我的单例初始值设定项,并将类名显式设置为返回类型:

@interface MyClass : NSObject
+ (MyClass *)sharedInstance;
@end

现在我想知道我是否应该改用 instancetype,像这样:

@interface MyClass : NSObject
+ (instancetype)sharedInstance;
@end   

最后结果是一样的,我只是想知道是否有理由在这里使用一个或另一个?

最佳答案

instancetype 对于涉及继承的情况很有用。假设您有类 A,它继承自类 BB 中返回 B 实例的方法之前可能声明为 id,它在 A 中的覆盖可能返回 A 的实例 - 这一切都很好,但编译器没有任何线索。然而,通过使用实例类型,编译器被告知当在 A 实例上调用时,该方法返回一个 A 实例,因此可以提供更好的诊断、代码完成等。

现在在您的示例中您使用了 MyClass * 而不是 id,因此您已经将类型告知编译器。您还有一个共享实例模型(不是单例模型,因为您可以使用 MyClass 的其他实例),您是否可能定义另一个类继承自 MyClass 并覆盖 sharedInstance 方法?可能不是,但如果你这样做,instancetype 可能会有用,否则它什么也得不到。

关于objective-c - 单例的实例类型与类名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16743494/

相关文章:

ios - 在 Objective-C 中使用 GCD 的 dispatch_once 创建单例

amazon-web-services - 列出特定 AMI 的所有可能实例类型?

amazon-web-services - AWS 实例类型名称中数字的含义

objective-c - 为什么 initWithCoder 不返回实例类型?

ios - 打开手机应用程序而不调用电话

iphone - 如何在我的类中进行多个 xml 解析

ios - 如何将相同的层对象添加到任何 'UITextField'

iphone - 在 iPhone TableView 单元格的单元格右侧添加小箭头

c++ - 具有多重继承的单例

swift - 在 Swift 中模拟单例/共享实例