Ответ 1
Ничего не произойдет. Цикл for-in использует протокол NSFastEnumeration
для перебора элементов в коллекции, поэтому вы по существу отправляете сообщение в nil
, которое безопасно в Objective-C.
Что должно произойти здесь? Это безопасно?
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
}
Ничего не произойдет. Цикл for-in использует протокол NSFastEnumeration
для перебора элементов в коллекции, поэтому вы по существу отправляете сообщение в nil
, которое безопасно в Objective-C.
Быстрое перечисление реализуется с помощью метода - countByEnumeratingWithState:objects:count:
, который возвращает 0, чтобы сигнализировать о конце цикла. Поскольку nil
возвращает 0
для любого метода, ваш цикл никогда не должен выполняться. (Так что это безопасно.)