Ответ: какая проблема будет, если массив будет изменен после того, как вы его вернете?
Если вы создаете изменяемый массив внутри вашего метода, а затем возвращаете его, никогда больше не будете его использовать, я думаю, что это нормально - возвращать изменяемую версию. Тот факт, что ваш метод объявляет возвращаемый тип NSArray, означает только то, что вы не будете гарантировать, что массив будет изменчивым. Вам не нужно гарантировать, что он неизменен.
С другой стороны, если вы возвращаете массив, который ваш класс использует внутри, гораздо безопаснее вернуть неизменяемую копию. В приведенном выше примере это не так.
Потребитель массива, если он хочет сохранить ссылку, должен использовать copy
вместо retain
; если массив изменчив, они получат неизменную копию. Если он уже неизменен, будет увеличен только счетчик ссылок. Так что штраф за копирование неизменяемого объекта отсутствует.
Другими словами, ваш второй вариант в порядке. (Хотя приведение к (NSArray *)
совершенно не нужно.)