这个Objective-C代码如何工作?

igo*_*rov 1 methods runtime objective-c

码:

int main(int argc, const char * argv[]) {
    id idObject = @"12345";
    NSNumber *n = idObject;

    NSLog(@"%@\n", [n description]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它打印"12345".怎么样?我想这是因为Objective-C使用动态绑定.因此,决定在运行时选择哪种方法,并且该决定基于方法(选择器)和接收器对象的名称.也许接收器对象因"isa"指针而被人知道......?

Mar*_*bri 5

这是因为:

  1. 从中继承的所有对象NSObject都有一个description方法.
  2. Objective-C不强制执行类型,因此n实际上是一个NSString而不是NSNumber您可能想到的类型.