美文网首页
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