2010-08-04 68 views
1

我有一个id<NSFastEnumeration>对象。我想计算对象内的元素。这怎么能实现?内部计数元素id <NSFastEnumeration>

的唯一方法NSFastEnumeration工具是:

- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len 

这个方法返回我要找的计数,但我并不想真正枚举我不知道的对象,有什么我可以安全地传递作为参数。是否可以通过零,零,0?如果不是,我应该通过什么?

背景:

我想创建一个函数的返回值,这是我要与给定集合中的每个元素调用一个NSArray。我想要一个函数枚举集合的结果数组。

id<NSFastEnumeration> enumeratable = someObject; 
NSMutableArray* results = [NSMutableArray arrayWithCapacity:(#Fill in count here#)]; 
for (id object in enumeratable) { 
    [results addObject:callFunctionOnObject(object)]; 
} 

正如你所看到的,我只需要计数来优化数组初始化。我很清楚我可以用NSMutableArray* results = [NSMutableArray array];代替。

回答

2

从NSFastEnumeration获取长度的唯一方法是遍历它。

int count = 0; 
for (id x in enumerator) 
    ++ count; 
return count; 

当然这意味着enumerator将被耗尽,你不能再循环它。

此外,容量只是一个提示。设置它几乎没有什么好处。

+0

谢谢你的回答。我知道容量只是一个暗示,但后来我好奇,想知道。我将坚持'NSMutableArray * results = [NSMutableArray array];'然后。 – tonklon 2010-08-04 09:09:40

+0

*当然这意味着枚举器将被耗尽,并且不能再循环。*是否?我无法在文档中的任何地方找到它是真实的。 – JeremyP 2010-08-04 12:49:23

+0

@Jeremy:看看采用NSFastEnumeration的NSEnumerator。 – kennytm 2010-08-04 13:25:31