NSArray * sortedKeys = [[names allKeys] sortedArrayUsingSelector:@selector(compare:)];
上述代碼使用您提供的選擇器返回字典鍵的排序數組。選擇器實際上是將在您的數組中正在排序的對象上調用的函數。在這種情況下,您的數組包含字符串所以在實際NSArray的排序代碼會發生以下,
//...
[key1 compare:key2];
//..
如果你在一個不同的選擇通過讓說@selector(randomFunction :)然後在分類代碼下面會發生
//..
[key1 randomFunction:key2];
//..
由於NSString沒有響應選擇器randomFunction,你會得到一個錯誤。如果你想創建你自己的比較函數類型,你需要爲數組包含的類添加一個類別(在你的情況下是NSString的一個類別)。
排序數組的更好方法是使用塊語句。
id mySort = ^(NSString * key1, NSString * key2){
return [key1 compare:key2];
};
NSArray * sortedKeys = [[names allKeys] sortedArrayUsingComparator:mySort];
它是一個更好的方式的原因是排序任何對象是很容易做到的。
id mySort = ^(MyObject * obj1, MyObject * obj2){
return [obj1.title compare:obj2.title];
};
NSArray * sortedMyObjects = [myObjects sortedArrayUsingComparator:mySort];
+1 - 很好的解釋 – bryanmac 2012-02-11 20:00:53