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

时间:2011-08-29 00:17:25

标签: objective-c memory-management message null

我知道将release消息发送给nil对象是可以的。 其他消息呢?以下代码将0打印到控制台。我想了解原因。

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

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

2 个答案:

答案 0 :(得分:5)

对于标量返回类型,保证从消息返回nil个对象的返回值等于零,即nil00.0,{{1等等。

见这里:Sending Messages to nil

答案 1 :(得分:4)

objc_msgSend()有效地将邮件丢弃到nil。如果该方法具有非void返回类型,则会返回类似nil的内容,即0NO0.0,尽管{{3 }}。因此,您可能遇到的唯一错误是当您的对象不是真的为零时(例如,当它是对已释放对象的引用时),或者当您没有正确处理nil作为返回类型时。

在您的示例中,-count返回NSUInteger,因此i的值为0,因为objc_msgSend()将返回0对于应该返回nil的{​​{1}}邮件。