instancetype和id

id是一个数据类型,是动态数据类型

是数据类型, 所以就可以用来
1.定义变量
2.作为函数的参数
3.作为函数的返回值

默认情况下所有的数据类型都是静态数据类型

静态数据类型的特点:
在编译时就知道变量的类型,
知道变量中有哪些属性和方法
在编译的时候就可以访问这些属性和方法,
通过静态数据类型定义变量, 如果访问了不属于静态数据类型的属性和方法, 那么编译器就会报错

 动态数据类型的特点:
 在编译的时候编译器不知道变量的类型, 只有在运行的时候才知道它的类型
 通过动态数据类型定义变量, 访问了不属于动态数据类型的属性和方法, 编译器不会报错

id 等于 NSObject * 万能指针
id和NSObject *的区别:
NSObject *是一个静态数据类型
id 是一个动态数据类型

静态数据类型定义变量, 不能调用子类特有的方法
动态数据类型定义变量, 可以调用子类特有的方法
动态数据类型定义的变量, 可以调用私有方法

应用场景: 多态, 可以减少代码量, 避免调用子类特有的方法需要强制类型转换

为了避免动态数据类型运行时的错误, 如果使用动态数据类型定义一个变量, 在调用这个对象的方法之前会进行一次判断,
判断当前对象是否能够调用这个方法

    id obj = [Student new];
    /*
    if ([obj isKindOfClass:[Student class]]) {
        // isKindOfClass , 判断指定的对象是否是某一个类, 或者是某一个类的子类
        [obj eat];
    }
     */

    if ([obj isMemberOfClass:[Student class]]) {
        // isMemberOfClass : 判断指定的对象是否是当前指定的类的实例
        [obj eat];
    }

instancetype

instancetype 等同于id

instancetype只能用于为返回值

为什么使用instancetype

由于id是动态数据类型 在编译的时候不能检测出它的真实类型,
即使代码出现问题程序也不会报错
而instancetype在编译时可以检测出他的类型 ,这样减少了代码的出错率

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值