instancetype

作者: mieGod | 来源:发表于2016-04-08 15:03 被阅读161次

本文章翻译自官方文档

使用instancetype关键字作为方法的返回值,能够返回一个类的实例。比如alloc,init等方法。
在一个合适的地方使用instancetype取代id将使你的代码更加安全。看下下面的代码:

@interface MyObject : NSObject
+ (instancetype)factoryMethodA;
+ (id)factoryMethodB;
@end
 
@implementation MyObject
+ (instancetype)factoryMethodA { return [[[self class] alloc] init]; }
+ (id)factoryMethodB { return [[[self class] alloc] init]; }
@end
 
void doSomething() {
    NSUInteger x, y;
 
    x = [[MyObject factoryMethodA] count]; // Return type of +factoryMethodA is taken to be "MyObject *"
    y = [[MyObject factoryMethodB] count]; // Return type of +factoryMethodB is "id"
}

方法+factoryMethodA的返回值是instancetype类型,即MyObject *类型。由于MyObject这个类没有-count这个方法,所以编译器会在x行给出这么一个警告:

main.m: ’MyObject’ may not respond to ‘count’

然而,由于方法+factoryMethodB的返回值是id类型,所以编译器在y行没有任何警告。

还有下面这个例子:

@interface MyObjectSubclass : MyObject
@end
 
void doSomethingElse() {
        NSString *aString = [MyObjectSubclass factoryMethodA];
}

编译器会报如下警告:

main.m: Incompatible pointer types initializing ’NSString *’ with an expression of type ’MyObjectSubclass *’

这两个例子就能大致说明instancetypeid的区别了。

结束语

翻译本文的目的,最主要的目的是让我自己慢慢适应看官方文档,因为咱们学习iOS的所有权威的资料都来自apple开发者网站,所以看文档也是最直接和最有效的方式。

最后,内容有翻译错误和不准确的地方请大家帮我指正,谢谢。

相关文章

  • 单例

    (instancetype)shareInstance; (instancetype)shareInstance{...

  • 单例

    .h + (instancetype)managerCenter; .m + (instancetype)mana...

  • iOS开发总结(一)

    instancetype和id instancetype比id多一个好处:编译器会检测instancetype的真...

  • iOS init~初始化流程

    UIView有多个init方法 - (instancetype)init - (instancetype)init...

  • iOS笔记-关于instancetype

    参考Adopting Modern Objective-C instancetype说明 instancetype...

  • instancetype

    我们经常忽略 Cocoa 充满了约定,并且这些约定可以帮助编译器变得更加聪明。无论编译器是否遭遇 alloc 或者...

  • instancetype

    instancetype与id,类前缀 instancetype在类型表示上,跟id一样,可以表示任何对象类型 i...

  • instancetype

    本文章翻译自官方文档 使用instancetype关键字作为方法的返回值,能够返回一个类的实例。比如alloc,i...

  • instancetype

    instancetype和id的区别 instancetype在类型表示上,跟id一样,可以表示任何对象类型 in...

  • instancetype

    instancetype在类型表示上,跟id一样,可以表示任何对象类型 instancetype只能用在返回值类型...

网友评论

    本文标题:instancetype

    本文链接:https://www.haomeiwen.com/subject/ejuvlttx.html