Простая причина в том, что за кулисами находится цикл for, который будет продолжать принимать аргументы от va_list
до достижения nil
. Таким образом, конечным условием могло быть что угодно, например, строка «стоп». Но nil
на самом деле довольно умный.
Допустим, у нас есть три объекта hansel
, gretel
и woodcutter
и мы создаем их массив:
NSArray *startCharacters = [NSArray arrayWithObjects:hansel, gretel, woodcutter, nil];
Теперь мы понимаем, что woodcutter
никогда не был инициирован, поэтому он nil
, но startCharacters
будет по-прежнему создаваться с объектами hansel
и gretel
, поскольку, когда он достигает woodcutter
, он завершается. Таким образом, нулевое окончание в arrayWithObjects:
предотвращает сбой приложения.
Если вам не нравится выписывать nil
, вы всегда можете создать массив следующим образом:
NSArray *startCharacters = @[hansel, gretel, woodcutter];
Это верно, оно короче, но оно потерпит крах, если объект будет nil
. Таким образом, вывод заключается в том, что arrayWithObjects:
все еще может быть очень полезным, и вы можете использовать его в своих интересах.