我知道向零对象发送release消息是可以的。其他消息怎么办?下面的代码将0打印到控制台。我想知道为什么。
NSArray *a = nil;
int i = [a count];
NSLog(@"%d", i);向nil对象发送消息是否会导致错误?
发布于 2011-08-29 00:30:36
objc_msgSend()有效地将消息丢弃到nil。如果该方法具有非void返回类型,则它将返回类似于nil的内容,即0、NO或0.0,尽管是这并不总是保证所有平台上的所有返回类型。因此,您可能会遇到的唯一错误是当您的对象实际上不是零时(例如,当它是对已分配对象的引用时),或者当您没有适当地将nil作为返回类型处理时。
在您的示例中,-count返回一个NSUInteger,因此i的值将是0,因为objc_msgSend()将向nil返回0,该消息应该返回NSUInteger。
发布于 2011-08-29 00:29:37
保证从消息返回nil对象的值对于标量返回类型,即nil、0、0.0、NO等,返回等价于零的值。
看这里:向零发送消息。
https://stackoverflow.com/questions/7224939
复制相似问题