为什么不在初始化时使用NSObject而不是id

Kri*_*nan 1 objective-c nsobject

创建新对象并初始化时,为什么要使用id?我们不能使用(NSObject*)吗?

ham*_*ene 6

并非Objective C中的每个对象都是NSObject.还有其他根类(例如,NSProxy),它们不是派生自的NSObject.

id绝对意味着任何对象.一切都是可以接收消息的目标C(包括Class)可以在id没有类型警告的情况下传递.

NSObject*仅适用于实际派生自的对象NSObject.如果你传递的东西不是从它派生的,那么输入checker就会抱怨.

  • 几乎; 使用`id`的一个重要原因是因为它不需要转换为更具体的类型,而`NSObject*`则需要. (4认同)