Objective-c 如何处理发送到 nil 对象的消息?

发布于 12-01 23:50 字数 232 浏览 0 评论 0原文

我知道可以将 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

暗恋未遂2024-12-08 23:50:39

对于标量返回类型,从消息到 nil 对象的返回值保证返回相当于零的值,即 nil00.0NO 等。

参见此处:向 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.

谁许谁一生繁华2024-12-08 23:50:39

objc_msgSend() 有效地将消息丢弃到 nil。如果该方法具有非 void 返回类型,它将返回类似 nil 的内容,即 0NO ,或 0.0,尽管这并不总是能保证所有返回类型平台。因此,您可能遇到的唯一错误是当您的对象不是真正的 nil 时(例如,当它是对已释放对象的引用时),或者当您没有适当地将 nil 作为返回类型处理时。

在您的示例中,-count 返回一个 NSUInteger,因此 i 的值将为 0,因为 objc_msgSend() 将返回 0,表示向 nil 发送消息,该消息应返回 NSUInteger

objc_msgSend() effectively drops messages to nil. If the method has a non-void return type, it will return something like nil, i.e. 0, NO, or 0.0, although this isn't always guaranteed all return types on all platforms. Thus, the only errors you're likely to encounter are when your object isn't really nil, (e.g. when it's a reference to a deallocated object), or when you don't handle nil as a return type appropriately.

In your example, -count returns an NSUInteger, so the value of i will be 0, since objc_msgSend() will return 0 for a message to nil that should return an NSUInteger.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文