Objective-c 如何处理发送到 nil 对象的消息?
我知道可以将 release
消息发送给 nil 对象。 其他消息怎么样?以下代码将 0
打印到控制台。我想了解为什么。
NSArray *a = nil;
int i = [a count];
NSLog(@"%d", i);
向 nil
对象发送消息是否会导致错误?
I know it's ok to send the release
message to nil objects. What about other messages? The following code prints 0
to the console. I'd like to understand why.
NSArray *a = nil;
int i = [a count];
NSLog(@"%d", i);
Does sending messages to nil
objects ever cause errors?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(2)
谁许谁一生繁华2024-12-08 23:50:39
objc_msgSend()
有效地将消息丢弃到 nil
。如果该方法具有非 void
返回类型,它将返回类似 nil
的内容,即 0
、NO
,或 0.0
,尽管这并不总是能保证所有返回类型平台。因此,您可能遇到的唯一错误是当您的对象不是真正的 nil 时(例如,当它是对已释放对象的引用时),或者当您没有适当地将 nil 作为返回类型处理时。
在您的示例中,-count
返回一个 NSUInteger
,因此 i
的值将为 0
,因为 objc_msgSend()
将返回 0
,表示向 nil
发送消息,该消息应返回 NSUInteger
。
~没有更多了~
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
对于标量返回类型,从消息到
nil
对象的返回值保证返回相当于零的值,即nil
、0
、0.0
、NO
等。参见此处:向 nil 发送消息。
Return values from messages to
nil
objects are guaranteed to return the equivalent of zero for scalar return types, i.e.,nil
,0
,0.0
,NO
, etc.See here: Sending Messages to nil.