zoukankan      html  css  js  c++  java
  • 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

    {

    }

  • 相关阅读:
    分布式文件系统
    分布式文件系统
    ASP.NET MVC 使用 FluentScheduler 定时器计划任务
    从零开始学 Java
    从零开始学 Java
    从零开始学 Java
    从零开始学 Java
    从零开始学 Java
    从零开始学 Java
    从零开始学 Java
  • 原文地址:https://www.cnblogs.com/heri/p/4583592.html
Copyright © 2011-2022 走看看