Даже вопрос и ответ очень старые, кто-то должен это исправить.
- Что значит «лучше»? Лучше что? Ваша Q утечки информации, в чем проблема, и это в значительной степени основано на мнении. Тем не менее, он не закрыт.
Если вы говорите о производительности, вы можете измерить ее самостоятельно. Но помните, Дональд Кнут: «Преждевременная оптимизация - корень всего зла».
- Если я серьезно отнесусь к вашему Q, «лучше» может означать производительность во время выполнения, объем памяти или архитектуру. По первым двум темам легко проверить себя. Так что никакого ответа не требуется.
С архитектурной точки зрения все усложняется.
Прежде всего я должен отметить, что наличие экземпляра NSArray
не означает, что он неизменен. Это потому, что в Какао изменяемые варианты коллекций являются подклассами неизменяемых вариантов. Поэтому экземпляр NSMutableArray
является экземпляром NSArray
, но, очевидно, изменяемым.
Можно сказать, что это не очень хорошая идея, особенно если подумать о Барбаре и Джанетт и что существует проблема круг-эллипс , которую нелегко решить , Тем не менее, это как есть.
Таким образом, только документы могут дать вам информацию, является ли возвращаемый экземпляр неизменным или нет. Или вы делаете проверку во время выполнения. По этой причине некоторые люди всегда делают -copy
для каждой изменяемой коллекции.
Однако изменчивость - это еще один корень зла. Поэтому: если это возможно, всегда создавайте экземпляр NSArray
в качестве конечного результата. Запишите это в своих документах, если вы возвращаете этот экземпляр из метода (особенно getter) или нет, чтобы каждый мог положиться на неизменность или нет. Это предотвращает неожиданные изменения "за сценой". Это важно, а не 0,000000000003 сек времени выполнения или 130 байт памяти.