Den*_*er9 0 iphone collections objective-c nsarray ios
有没有一种简单的方法可以对数组中的一系列对象进行快速枚举?就像是...
for (Object *object in myArray startingAtIndex:50) {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
......为了避免做这样的事......
for (Object *object in myArray) {
NSUInteger index = [myArray indexOfObject:object];
if (index >= 50) {
//do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
如果myArray是不可变的,那么subArrayWithRange: 可能不会复制指针,尽管retain 可能仍然需要发送到子数组中的所有内容.
总的来说,这没关系.我老实说从来没有见过快速枚举与indexOfObject:足以引起注意的性能问题的情况(总是存在更糟糕的情况.:).
另一种方法; 使用enumerateBlock:并简单地从索引返回游侠(并使用停止标志).
[myArray enumerateWithBlock: ^(id o, NSUInteger i, BOOL *f) {
if (i < 10) return;
if (i > 20) { *f = YES; return; }
... process objects in range ...
}];
Run Code Online (Sandbox Code Playgroud)
(你甚至可以使用options:变量同时枚举.)
我想到了这些:
for (Object *object in [myArray subArrayWithRange:NSMakeRange(50, ([myArray count] - 49))]) {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
这会创建一个临时数组,因此可能比这样的手动枚举更慢(基准测试!):
NSUInteger arrayCount = [myArray count];
for (NSUInteger i = 50; i < arrayCount; i++) {
Object *object = [myArray objectAtIndex];
// do stuff
}
Run Code Online (Sandbox Code Playgroud)