2010-08-04 65 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