Mik*_*e D 5 objective-c fast-enumeration
我在这里有这个问题(以及关于SO的其他问题),以及有关Objective-C集合和快速枚举的Apple文档.不清楚的是,如果NSArray填充了不同类型,并创建了一个循环,如:
for ( NSString *string in myArray )
NSLog( @"%@\n", string );
Run Code Online (Sandbox Code Playgroud)
这到底发生了什么?循环会跳过任何不是的东西NSString吗?例如,如果(为了参数)a UIView在数组中,当循环遇到该项时会发生什么?
你为什么想这么做?我认为这会导致错误和无意识的行为.如果您的数组填充了不同的元素,请改用:
for (id object in myArray) {
// Check what kind of class it is
if ([object isKindOfClass:[UIView class]]) {
// Do something
}
else {
// Handle accordingly
}
}
Run Code Online (Sandbox Code Playgroud)
你在你的例子中所做的实际上与
for (id object in myArray) {
NSString *string = (NSString *)object;
NSLog(@"%@\n", string);
}
Run Code Online (Sandbox Code Playgroud)
仅仅因为你投object的(NSString *),并不意味着string实际上会指向一个NSString对象.调用NSLog()以这种方式将调用- (NSString *)description根据该方法NSObject的协议,其被类的数组内引用的可能或可能不符合.如果它符合,它将打印出来.否则,它会崩溃.
| 归档时间: |
|
| 查看次数: |
5696 次 |
| 最近记录: |