iOS面试 - id、NSObject*、instancetype 有什么区别?

id:

  • id 声明的对象具有运行时的特性,即可以指向任意类型的 Objcetive-C 的对象;

  • id 是一个 objc_object 结构体指针,定义是

    typedef struct objc_object *id
    
  • id 可以理解为指向对象的指针, id 可以指向所有 oc 的对象,编译器不会做类型检查;

  • id 调用任何存在的方法都不会在编译阶段报错,当然如果这个 id 指向的对象没有这个方法,该崩溃还是会崩溃的。

NSObject *:

  • NSObject * 指向的必须是 NSObject 的子类;
  • 调用的也只能是 NSObject 里面的方法否则就要做强制类型转换;
  • 不是所有的 OC 对象都是 NSObject 的子类,还有一些继承自 NSProxy;
  • NSObject * 可指向的类型是 id 的子集。

instancetype:

  • instancetype 只能作为返回值,编译时判断真实类型,不符合发警告。
发布了17 篇原创文章 · 获赞 0 · 访问量 232
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览