zoukankan      html  css  js  c++  java
  • 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
    {
    
    }
  • 相关阅读:
    单元测试
    软件工程
    使用工具进行单元测试
    关于软件工程的理解
    使用Junit等工具进行单元测试
    目前对软件工程所存在的问题
    二人组-----五子棋
    使用Junit等工具进行单元测试过程记录
    对软件工程的理解以及存在的问题
    软件设计文档及数据流向图
  • 原文地址:https://www.cnblogs.com/fengmin/p/6140001.html
Copyright © 2011-2022 走看看