gpt4 book ai didi

objective-c - NSEnumerator 的值是多少?

转载 作者:行者123 更新时间:2023-12-03 07:49:40 24 4
gpt4 key购买 nike

当 . 。 。在 。 。 。有空吗?

具体来说,当我们可以写:

NSArray *array;
// array allocated and initialized here.
for (id obj in array) {
// do something to the object here
}

我们为什么要使用 NSEnumerator?

最佳答案

NSEnumerator 是在快速枚举(for/in 循环)可用之前创建的。如果您愿意,可以将其视为向后兼容。

但是使用 NSEnumerator,您可以按自定义顺序枚举集合,例如向后:

NSEnumerator* enu = [array reverseObjectEnumerator];
id object;
while ((object = [enu nextObject])) {
...
}

(当然,由于 NSEnumerator 也支持 for/in 循环,您可以使用更好的方法:

for (id object in [array reverseObjectEnumerator]) {
...
}

)

或者通过子类化 NSEnumerator 来定义您自己的迭代器类,例如

#import <Foundation/Foundation.h>

@interface RangeEnumerator : NSEnumerator {
int cur, len;
}
+(RangeEnumerator*)enumeratorWithLength:(int)length;
-(id)initWithLength:(int)length;
-(id)nextObject;
@end
@implementation RangeEnumerator
-(id)initWithLength:(int)length {
if ((self = [super init]))
len = length;
return self;
}
+(RangeEnumerator*)enumeratorWithLength:(int)length {
return [[(RangeEnumerator*)[self alloc] initWithLength:length] autorelease];
}
-(id)nextObject {
if (cur < len)
return [NSNumber numberWithInt:cur++];
else
return nil;
}
@end

int main () {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

for (NSNumber* num in [RangeEnumerator enumeratorWithLength:12])
printf("%d\n", [num intValue]);

[pool drain];

return 0;
}

关于objective-c - NSEnumerator 的值是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2394089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com