NSSortStable
указывает, что если два объекта сравниваются одинаково, их порядок должен оставаться неизменным.
Например, давайте рассмотрим следующее:
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"one", @"two", @"three", @"four", nil];
[array sortWithOptions:0 usingComparator:^NSComparisonResult(id obj1, id obj2) {
if ( [obj1 length] < [obj2 length] )
return NSOrderedAscending;
if ( [obj1 length] > [obj2 length] )
return NSOrderedDescending;
return NSOrderedSame;
}];
Если вы не укажете NSSortStable
, отсортированный массив может быть либо (one, two, four, three)
, либо (two, one, four, three)
, так как one
и two
имеют одинаковую длину. Оба результата приняты. Это позволяет алгоритму сортировки работать (немного) быстрее.
При указании NSSortStable
объекты, которые сравниваются одинаково, должны быть возвращены в их первоначальном порядке (то есть сначала one
, затем two
).