• OC中instancetype与id的区别


    1、在ARC环境下:

    instancetype用来在编译期确定实例的类型,而使用id的话,编译器不检查类型, 运行时检查类型。

    2、在MRC环境下:

    instancetype和id一样,不做具体类型检查。

    id 可以作为方法参数传递, intancetype 不能。

    id 可以去接受对象, instancetype不能

    在自定义初始化或者便利构造方法中尽量使用instancetype作为返回值类型,保证类型安全

    当我们初始化 NSArray时

    NSArray * array = [[NSArray alloc] init];

    [NSArray alloc]返回类型属于关联返回类型,NSArray *

    instancetype

    假如一个不是关联返回类型的方法

    @interface NSArray
    +(id)constructAnArray;
    @end

    当我们初始化的时候

    [NSArray constructAnArray]

    得到返回类型和方法声明的返回类型一样,是id

    如果使用 instancetype 作为返回类型

    @interface NSArray
    +(instancetype)constructAnArray;
    @end

    同样方式初始化

    [NSArray constructAnArray]

    得到的返回类型和方法所在类型相同,是 NSArray *

    instancetype的作用,就是使那些非关联返回类型的方法返回所在类的类型!

    好处:确定对象类型帮编译器更好定位代码问题。

    相同点:
    作为方法的返回类型

    不同点:
    1、instancetype 可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象。

    2、instancetype只能作为返回值,id可以作为参数.

    -(void)setValue:(instancetype)value
    {
    
    }
    报错!
    应该写成
    -(void)setValue:(id)value
    {
    
    }
  • 相关阅读:
    Android常见问题——找不到HttpClient和okHttp的包
    linux大文件的日志查询
    ubuntu ssh连不上
    linux查询核数
    ubuntu系统安装手动分区
    计算服务器带宽
    linux命令
    打包jar 运行
    打印pdf
    运行 jar 包
  • 原文地址:https://www.cnblogs.com/fengmin/p/6140001.html
Copyright © 2020-2023  润新知