• instancetype和id的区别,objective-c


    instancetype   clang 3.5 提供的关键字,  表示:某方法返回未知类型的OC对象

    都知道id任意类型关键字,为什么还会出现一个新的关键字?

    返回关联类型 

    1、类方法中,alloc, new开头

    2、实例方法中 autorelease,init,retain,self开头

    会返回方法所在类的类型的对象,即关联返回类型的方法。

    这些方法的返回结果以方法所在的类为类型。

    for example

    @interface NSObject

    +(id)alloc;

    -(id)init;

    @end

    当我们初始化 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

    {

    }

  • 相关阅读:
    超级钢琴 2010年NOI
    vijos P1375 大整数(高精不熟的一定要做!)
    COGS 445. [HAOI2010]最长公共子序列
    系统升级
    mariabd mysql升级mariadb
    mysql view 视图
    mysql 杂
    mysql主从复制
    DNS迭代查询与递归查询的区别
    Python 中 str 和 repr 的区别
  • 原文地址:https://www.cnblogs.com/heri/p/4583592.html
Copyright © 2020-2023  润新知