Полагаю, первый вариант был предпочтительнее, потому что предпочтительным был полиморфизм.
В любом случае оба метода возвращают экземпляр NSMutableArray
, с той лишь разницей, что первый скрывает этот факт от вызывающей стороны. Другими словами, первый вариант не безопаснее второго. По сути, он использует полиморфизм, чтобы сообщить вызывающей стороне, что может быть возвращен любой тип NSArray
. Если вам нужна такая гибкость в вашем коде, у него определенно есть свои преимущества. (например, если однажды по какой-либо причине вам понадобится вернуть пользовательский подкласс NSArray
, ваш код не сломается на этом уровне).
Однако вы, кажется, предпочитаете сообщать намерение вызывающей стороне - то есть, что вы на самом деле возвращаете изменяемые массивы - что тоже нормально. Чтобы все были довольны (если что-то есть ...), я предлагаю переименовать 2-й метод в:
- (NSMutableArray *)mutableFooBar {
NSMutableArray *fooArray = [NSMutableArray array];
//populate fooArray
return fooArray;
}
В качестве примечания, я думаю, что следующее является несколько более эффективным способом преобразования существующего неизменяемого массива в изменяемый:
NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:fooArray];
(поправьте меня, если я ошибаюсь в этом предположении).
Надеюсь, это ответит на ваш вопрос ...