[※※] objc 中向一个 nil 对象发送消息将会发生什么?
无反应。
原因是objc_msgSend在获取 nil 对象的 isa 指针的时候就返了一个 0 地址。
根据方法的返回值,得到的值也有一点点不同,如下:
- 如果方法「返回值是一个对象」:那么会得到一个 nil 对象
- 如果方法「返回值是一个结构体」:那么会得到一个空结构体,结构体中的字段全部为0
- 如果是 privilege 数据(比如 int, boolean),也返回 0
- (void)testNil {
Mother *mother = [self returnNil];
NSObject *object = [mother init];
NSInteger i = [mother init]; // i 会得到 0 这个值
NSLog(@"%@, %d", object, i);
//打印出来是 (null), 0
}
- (id)returnNil {
return nil;
}