Вероятно, самое простое, что нужно сделать, если вы хотите создать массив, это создать категорию в NSMutableArray с помощью метода, который вставляет объект в нужное место.Однако это немного неудовлетворительно (ничто не мешает вам вставлять объекты с помощью обычного метода и нарушать порядок), поэтому вам, вероятно, нужен собственный класс коллекции.Вы можете легко создать это, обернув NSMutableArray и компаратор в новый класс.например,
@interface MyOrderedArray : NSObject <NSFastEnumeration>
-(id) initWithComparator: (NSComparator) anOrdering;
-(void) insertObject: (id) aNewObject;
// methods to access objects from the array
@end
@implementation MyOrderedArray
{
NSComaparator theOrdering;
NSMutableArray* backingArray;
}
-(id) initWithComparator: (NSComparator) anOrdering
{
self = [super init];
if (self != nil)
{
theOrdering = [anOrdering copy];
backingArray = [[NSMUtableArray alloc] init];
}
-(id) insertObject: (id) newObject
{
// use a binary search to find the index and insert the object there
}
В резервный массив могут быть переданы другие методы, например,
-(NSUInteger) count
{
return [backingArray count];
}
, и этот будет полезен:
- (NSUInteger)countByEnumeratingWithState: (NSFastEnumerationState*) state
objects: (id*) stackbuf
count: (NSUInteger) len
{
return [backingArray countByEnumeratingWithState: state
objects: stackbuf
count: len];
}