将Cocoa中的对象与比较进行比较:

时间:2015-04-11 13:55:25

标签: objective-c cocoa sorting

我注意到NSString理解了消息compare:,但我无法了解有关在Cocoa中比较对象的通用机制的信息。什么类实现compare:?这是某种protocol吗?

我需要这个来实现类似于Smalltalk's OrderedCollection的东西:一个始终保持排序的数组。

谢谢你!

1 个答案:

答案 0 :(得分:2)

你正确地在某些类上出现compare:并且用于排序,但它不是任何协议的标准部分。 (-isEqual:需要NSObject,因此几乎所有内容都存在。{/ p>

您可以通过告诉集合通过compare:方法对每个项目对其内容进行排序来对集合进行排序:

[myMutableArray sortUsingSelector:@selector(compare:)];

如果在自己的类上实现比较方法,那么它应该接受同一个类的对象,并根据需要返回NSOrderedAscendingNSOrderedDescendingNSOrderedSame

该方法的存在不是标准化的,因为它的语义不能真正标准化。许多对象可以通过多种方式进行“比较”,具体取决于您的需求。即使字符串同时包含compare:caseInsensitiveCompare:以及许多其他与语言环境相关的选项,具体取决于您要实现的目标。

所有这一切都说,当它适用于您时使用compare:,但它可以追溯到早期的ObjC,并且在许多自定义比较案例中也有基于块的机制用于排序,您可能会觉得更简单