我知道将release
消息发送给nil对象是可以的。 其他消息呢?以下代码将0
打印到控制台。我想了解原因。
NSArray *a = nil;
int i = [a count];
NSLog(@"%d", i);
向nil
个对象发送消息是否会导致错误?
答案 0 :(得分:5)
对于标量返回类型,保证从消息返回nil
个对象的返回值等于零,即nil
,0
,0.0
,{{1等等。
答案 1 :(得分:4)
objc_msgSend()
有效地将邮件丢弃到nil
。如果该方法具有非void
返回类型,则会返回类似nil
的内容,即0
,NO
或0.0
,尽管{{3 }}。因此,您可能遇到的唯一错误是当您的对象不是真的为零时(例如,当它是对已释放对象的引用时),或者当您没有正确处理nil作为返回类型时。
在您的示例中,-count
返回NSUInteger
,因此i
的值为0
,因为objc_msgSend()
将返回0
对于应该返回nil
的{{1}}邮件。