id 和 instancetype 方法的区别

首先明确 id 和 instancetype 都是万能指针,都能指向一个对象:(instancetype == id == 万能指针 == 指向一个对象)

主要区别亮点:

1. id 在编译时候不能判断对象的真是类型,但是instancetype 编译的时候可以判断对象真是类型,这样的话,编写代码时候,如果类型指错,instancetype可以告警。我们应该尽量把告警暴露在编译的时候。

2.另外  instancetype 只能用来做返回值,不能和id一样定义变量。 

// id在编译的时候不能判断对象的真实类型

// instancetype在编译的时候可以判断对象的真实类型

// id和instancetype除了一个在编译时不知道真实类型, 一个在编译时知道真实类型以外, 还有一个区别

// id可以用来定义变量, 可以作为返回值, 可以作为形参

// instancetype只能用于作为返回值

 

// 注意: 以后但凡自定义构造方法, 返回值尽量使用instancetype, 不要使用id

- (instancetype)init

//- (id)init

{

    if (self = [super init]) {

        _age = 5;

    }

    return self;

}
原文地址:https://www.cnblogs.com/XXxiaotaiyang/p/5025353.html