zoukankan      html  css  js  c++  java
  • iOS instancetype和id的区别

    区别: 

    1>instancetype在类型表示上,跟id一样,可以表示任何对象类型

    2>instancetype只能用在返回值类型上,不能像id一样用在参数类型上

    3>instancetype比id多一个好处:编译器会检测instancetype的真实类型

    第3点的解释: 在下面这种情况下
    // Person.m文件里
    + (id)person{
         return [[self alloc] init];
    }
    // mainViewController.m,下面这行代码,用字符串类型的指针指向Person类的对象,编译通过,因为person返回的id类型,任何指针都可以指向它
    NSString *str = [Person person];
     
    // 如果用instancetype,编译时,会有警告.也就是说instancetype比id多了检测真实类型的功能,可以提前暴露程序存在的风险
    + (instancetype)person{
         return [[self alloc] init];
    }
    NSString *str = [Person person]; //会有警告,[Person person]返回的Person类型, 警告信息:把Person类型的数据赋值给字符串类型
     

    // 可以这么说,作为返回值时,凡是用id的地方,都建议换成instancetype,例如下面的代码
    - (instancetype)initWithDic:(NSDictionary *) app
    {
        if(self == [super init]){
        self.name = app[@"name"];
            self.icon = app[@"icon"];
        }
        return self;
    }
    + (instancetype)initWithDic:(NSDictionary *) app
    {
        return [[[self alloc]init] initWithDic:app];
    }
     
  • 相关阅读:
    14 break
    13 for循环
    Python 3.7 将引入 dataclass 装饰器
    工程师如何在面试中脱颖而出
    如何避免 async/await 地狱
    命令行里打 cd 简直是浪费生命
    GitHub 十大 CI 工具
    GitHub CEO:GitHub 十年,感谢有你
    如何在 2 分钟内入睡(二战时期美国飞行员训练法)
    一分钟了解 TCP/IP 模型
  • 原文地址:https://www.cnblogs.com/oumygade/p/4271283.html
Copyright © 2011-2022 走看看