2011-12-13 72 views
1

,我發現這樣的代碼在這個網站:快速列舉不解

- (NSArray *) valueForKey:(id)key { 
    NSMutableArray *retval = [NSMutableArray array]; 

    for (NSObject *object in self) { 
    [retval addObject:[object valueForKey:key]]; 
    } 

    return self; 
} 

很抱歉的新手問題,但我無法弄清楚什麼是快速列舉那裏,自我只是一個對象,而不是一個集合。

+0

定義不出現做任何有用的。例如,它構建一個`retval`數組,然後甚至不返回它,而是返回`self`。 – 2011-12-13 18:06:04

+0

僅供參考,此代碼似乎來自http://stackoverflow.com/a/1164072/。 – 2011-12-13 18:34:27

回答

4

一個符合NSFastEnumeration protocol任何類都可以與in語法來枚舉。您發佈的代碼片段意味着該類還實現了由協議定義的-countByEnumeratingWithState:objects:count:方法,並且該方法返回一組NSObject實例來迭代。

0

如果您的示例有效,那麼這意味着self是實現NSFastEnumeration的類的實例。這是需要採用的協議,以便快速枚舉。

您可以創建自己的自定義對象並實現該協議。然後在那個類中你就可以打電話給

for (id obj in self) { 

這將導致下面的方法被調用的類,這是在NSFastEnumeration協議

countByEnumeratingWithState:objects:count: