没有警告id?

fuz*_*oat 4 iphone xcode cocoa-touch objective-c

我刚刚发现了一些我有点困惑的事情,我想知道是否会有人为我澄清它.

NSArray *nextArray = [NSArray arrayWithObjects:@"ONE", @"TWO", @"THREE", nil];
for(id eachObject in nextArray) {
    NSLog(@"COUNT: %d", [eachObject length]);
}
Run Code Online (Sandbox Code Playgroud)

为什么以上没有抱怨/警告我要求身份证的长度?

Iñi*_*tia 5

Objective-C id是任何类型对象的通用类型,不管是什么类,都可以用于类的实例和类对象本身.该id类型是完全非限制性的,它没有关于对象的信息,除了它是一个对象.因此,编译器无法知道该对象是否可以响应方法,因为它不知道它是什么类型的对象.通过在你的代码中使用它,你基本上会说'无论指向什么,执行此操作'.