iOS 面试题之向一个 nil 对象发送消息,会发生什么?

101 阅读1分钟

[※※] objc 中向一个 nil 对象发送消息将会发生什么?

无反应。

image.png

原因是objc_msgSend在获取 nil 对象的 isa 指针的时候就返了一个 0 地址。

根据方法的返回值,得到的值也有一点点不同,如下:

  1. 如果方法「返回值是一个对象」:那么会得到一个 nil 对象
  2. 如果方法「返回值是一个结构体」:那么会得到一个空结构体,结构体中的字段全部为0
  3. 如果是 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;
}