【发布时间】: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
我知道可以将 release 消息发送给 nil 对象。 其他消息呢?以下代码将0 打印到控制台。我想知道为什么。
NSArray *a = nil;
int i = [a count];
NSLog(@"%d", i);
向nil 对象发送消息是否会导致错误?
【问题讨论】:
标签: objective-c memory-management message null
从消息到nil 对象的返回值保证为标量返回类型返回等价的零,即nil、0、0.0、NO 等。
请看这里:Sending Messages to nil。
【讨论】:
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@.
【讨论】: