Быстрое перечисление по нулевому объекту - PullRequest
41 голосов
/ 21 октября 2011

Что здесь должно произойти?Это безопасно?

NSArray *nullArray=nil;
for (id obj in nullArray) {
  // blah
}

Точнее, нужно ли мне это делать:

NSArray *array=[thing methodThatMightReturnNil];
if (array) {
  for (id obj in array) {
    // blah
  }
}

или это нормально?

Ответы [ 2 ]

48 голосов
/ 21 октября 2011

Быстрое перечисление реализовано с помощью метода - countByEnumeratingWithState:objects:count:, который возвращает 0, чтобы сигнализировать об окончании цикла. Поскольку nil возвращает 0 для любого метода, ваш цикл никогда не должен выполняться. (Так что это безопасно.)

16 голосов
/ 21 октября 2011

Ничего не случится. Цикл for-in использует протокол NSFastEnumeration для перебора элементов в коллекции, поэтому вы, по сути, отправляете сообщение на nil, что безопасно в Objective-C.

...