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
    {
    
    }
  • 相关阅读:
    ubuntu Server 16.04 LTS 安装odoo
    linux常用命令大全
    sql 百万级数据库优化方案
    FreeSpire.XLS的使用
    备份集中的数据库与现有的数据库不同解决方案
    图片延迟加载的实现
    亚马逊菜单应用例子
    提取吗
    linux内核学习网站
    phpexcel1
  • 原文地址:https://www.cnblogs.com/fengmin/p/6140001.html
Copyright © 2011-2022 走看看