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
推荐阅读
- 家里这种床单可不要扔了,要比古董还值钱,难怪有钱人都收藏起来
- 鄂温克冬季马赛-30℃极寒开赛:寒冬中的火热派对
- 『呼吸衰竭』这种病小心拖成呼吸衰竭! 天冷了别大意
- 大雪@大雪腌肉 适当进补 今日大雪
- |电商事业中的“闪光少年”
- 坐标合肥,请问在哪里能捕捉到程序员这种生物他们大都出现在哪里呢
- 西安两男子从网上学会这种技术,竟专门用来......刑拘!
- 啥人会去买iPhone 8这种产品呢
- hadoop中的mapreduce链接(mapreduce chaining)怎样避免中间文件的产生
- 经观汽车|日系车企中的“异类”?东风日产将导入e-POWER技术大干增程式混动 | 经观汽车
