Подтвердить что ты не робот

Быстрое перечисление по объекту nil

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

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

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

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

или это прекрасно?:

for (id obj in [thing methodThatMightReturnNil]) {
  // blah
}
4b9b3361

Ответ 1

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

Ответ 2

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