【问题标题】:How does Objective-c handle messages sent to nil objects?Objective-c 如何处理发送给 nil 对象的消息?
【发布时间】:2011-11-05 16:46:37
【问题描述】:

我知道可以将 release 消息发送给 nil 对象。 其他消息呢?以下代码将0 打印到控制台。我想知道为什么。

NSArray *a = nil;
int i = [a count];
NSLog(@"%d", i);

向nil 对象发送消息是否会导致错误?

【问题讨论】:

    标签: objective-c memory-management message null


    【解决方案1】:

    从消息到nil 对象的返回值保证为标量返回类型返回等价的零,即nil、0、0.0、NO 等。

    请看这里:Sending Messages to nil。

    【讨论】:

      【解决方案2】:

      objc_msgSend() 有效地将消息投递到nil。如果该方法具有非void 返回类型,它将返回类似nil 的内容,即0、NO 或0.0,尽管this isn't always guaranteed all return types on all platforms。因此,您可能遇到的唯一错误是当您的对象不是真正的 nil 时(例如,当它是对已释放对象的引用时),或者当您没有将 nil 作为返回类型适当地处理时。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        • 2011-06-26
        • 2013-12-02
        • 2010-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多