Objective-C сортирует NSMutableArray и возвращает NSMutableArray (отсортировано) - PullRequest
1 голос
/ 06 июля 2011

Может быть, кто-то может просветить меня по этому вопросу. Я сортирую NSMutableArray, объявленный как ids. Когда я закончу сортировку, я возвращаю ее, используя return ids;, но по какой-то причине возвращенный массив не сортируется. Смотрите этот код:

NSMutableArray *ids = [[[NSMutableArray alloc] init] autorelease];

for (Career *career in careers) {
    [ids addObject:[career id]];
}

// Sort the array in an orderly fashion
[ids sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

return ids;

Это не возвращает отсортированный массив.

Но если я верну массив с примененным методом сортировки, он будет возвращен правильно отсортированным. Как это:

//Code is the same as above
return [ids sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

Кроме того, пока я занимался этим, я по ошибке использовал две точки с запятой (;) при написании оператора return, но я не получил никакой ошибки за это?

Ответы [ 2 ]

4 голосов
/ 06 июля 2011

-sortedArrayUsingSelector: возвращает новый отсортированный массив и не меняет исходный массив. Это означает, что:

[ids sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
return ids;

выполняет следующие действия:

  1. Создает новый отсортированный массив на основе ids и сохраняет ids без изменений;
  2. Удаляет возвращаемое значение метода (т. Е. Новый отсортированный массив), поскольку вы его не используете;
  3. Возвращает исходный массив ids.

Принимая во внимание:

return [ids sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

выполняет следующие действия:

  1. Создает новый отсортированный массив на основе ids и сохраняет ids без изменений;
  2. Используется возвращаемое значение метода (т. Е. Новый отсортированный массив) в качестве возвращаемого значения.

Если вы не хотите новый массив, используйте -sortUsingSelector: вместо:

0 голосов
/ 06 июля 2011

Это потому, что отсортированный массив - это не тот массив, который получает сообщение, а возвращаемый. Взгляните на sortedArrayUsingSelector:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...