在 Objective-C 中,声明变量有什么区别id
与声明它NSObject *
?
使用变量类型id
,你可以向它发送任何已知的消息,编译器不会抱怨。使用变量类型NSObject *
,您只能向其发送由 NSObject 声明的消息(不能是任何子类的方法),否则它将生成警告。一般来说,id
就是你想要的。
进一步解释:所有对象本质上都是类型id
。声明静态类型的目的是告诉编译器“假设该对象是此类的成员”。因此,如果您向它发送一条该类未声明的消息,编译器可以告诉您,“等等,该对象不应该收到该消息!”此外,如果两个类具有名称相同但签名不同(即参数或返回类型)的方法,它可以猜测您为变量声明的类所指的方法。如果它被声明为id
,编译器会举起手来告诉你,“好吧,我这里没有足够的信息。我正在随机选择一个方法签名。” (这通常不会通过声明来帮助NSObject*
, 尽管。通常冲突发生在两个更具体的类之间。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)