在 Objective-C 中,是
for (Foo *foo in fooList) ...
更像以下哪一项
@interface Bar : Foo ...
for (Foo *f in fooList) {
// A:
if ([f isMemberOfClass:[Foo class]]) ... // dont include Bar's
// B:
if ([f isKindOfClass:[Foo class]]) ... // both Foos and Bars
}
最佳答案
两者都不像。
foo
的类型在 for()
部分只是对编译器的提示,以便它可以给出相关的错误消息。在运行时,所有对象都只是对象,只要它们都实现了 block 中使用的方法,就不会出现错误。例如:
NSString* aString = @"20";
[anArray addObject: aString];
for (NSNumber* foo in anArray)
{
NSLog(@"%d", [foo intValue]);
}
将迭代数组中的所有对象,并将 intValue 发送给每个对象无论它们是什么类型,包括末尾的 NSString。如果每个对象都实现 intValue
它会工作得很好(就像 NSString 一样)。如果数组中有一个对象没有实现intValue,很可能会抛出异常。
关于objective-c - 对于对象继承的集合中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6694133/