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