Objective-C中的id这种数据类型存在的价值是啥

相当于c/c++里的void *其实id很好理解,就是指代任何类型的对象。多态情况下因为继承的原因可以依赖父类,但是没有继承关系的时候,就无法确定对象类型,这个时候就可以用id。比如你设计一个类的delegate,你设计的时候根本无法确定什么对象来做你的delegate,于是可以用id,表示任何类型对象都欢迎。
■网友
在objc.h里,id类型指向任意一个NSObject的子类,自己是个指针,要说存在的价值的话..typedef struct objc_object { Class isa;} *id; 用于描述delegate的类型,比如对于tableView来说其只知道自己的delegate是继承自UITableViewController的对象,但并不关心delegate具体的类型,只需要知道delegate是不是实现了那几个协议required方法就行了,这时候无法也没必要让tableView知道delegate的具体类型。容器类的遍历,对于Array来说似乎也不用关心自己包含哪些类型的对象,因此枚举迭代只需要知道有对象就可以了,至于枚举这些对象用来干什么那是程序员自己的事情,比如:;
■网友
写起来方便呀!不用去想具体的数据类型,不用写强制类型转换,大部分情况下符合开发者的自然思维习惯。至于滥用,任何东西滥用都不好。“离开剂量谈毒性就是耍流氓!”
■网友
【Objective-C中的id这种数据类型存在的价值是啥】 新的“数据类型” id
作用完全等同于: NSObject *也就是说id是对象指针。
id a; 等同于 NSObject *b;
可以通过“父类引用指向子类对象” 来指向、接收任何一个对象。
参考:
Objective-C中的面向对象 – 5 - iDP School - 专栏
■网友
对于会用的人来说,这是核武器

■网友
Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id


    推荐阅读