美文网首页
Objective-C中instancetype与id的区别

Objective-C中instancetype与id的区别

作者: hylccmh | 来源:发表于2018-07-05 11:53 被阅读0次
    一、说明

    相同点:
    instancetype 和 id 都是指针,指向对象

    不同点:
    1.id在编译的时候不能判断对象的真实类型,也就是说在编译器不做具体类型检查,运行时检查类型,instancetype在编译的时候可以判断对象的真实类型
    2.id可以用来定义变量,可以作为返回类型,可以作为形参类型;instancetype只适用于初始化方法和便利构造器的返回值类型

    二、例子

    我们看一个例子,这两种类型是如何在编译阶段确定类型的 ,我们声明一个类 ClassA

    @interface ClassA : NSObject
    
    @property (nonatomic, strong) NSString *name;
    
    - (instancetype)getACopy;
    - (id)getAnotherCopy;
    
    @end
    
    
    #import "ClassA.h"
    
    @implementation ClassA
    
    - (instancetype)getACopy {
        
        ClassA *instance = [ClassA new];
        instance.name = @"name";
        return instance;
    }
    
    - (id)getAnotherCopy {
        
        ClassA *class = [ClassA new];
        class.name = @"name";
        return class;
    }
    @end
    

    最后我们在 ViewController 中,分别对 getACopy 和 getAnotherCopy 进行调用,我们可以看到会有如下错误信息提示


    Pasted Graphic.jpg
    三、总结

    类型检查分动态和静态的。动态的在运行时做检查,静态的是由clang在编译时做检查,静态检查是为了帮助开发人员在编写代码的时候,查找错误

    相关文章

      网友评论

          本文标题:Objective-C中instancetype与id的区别

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