Будет -replaceObjectAtIndex: withObject: of NSMutableArray освободить старый объект, который заменен новым? - PullRequest
2 голосов
/ 25 мая 2009

Документация ничего не говорит об этом. Когда старый объект «удаляется» и на его место приходит новый, то что происходит со старым? Я должен выпустить это сам?

Ответы [ 3 ]

12 голосов
/ 25 мая 2009

Нет, вам не нужно выпускать его самостоятельно.

Вы можете получить ошибку, если замененный объект имеет счет сохранения, равный 0.

Новый объект сохраняется. Старый объект освобожден.

3 голосов
/ 25 мая 2009

Вам не нужно выпускать его.

Вы не выполняли alloc , copy или , сохраняют на нем и, таким образом, не несете ответственности за память - с этим документация достаточно ясна ,

Я бы не ожидал, что Apple документирует процедуры управления памятью для каждого метода в SDK, если только он не нарушает уже установленные правила управления памятью. Если в документации ничего не сказано, вы можете принять правила по умолчанию.

1 голос
/ 26 мая 2009

В документации очень четко указано это прямо вверху файла:

Как и NSArray, экземпляры NSMutableArray поддерживают строгие ссылки на свое содержимое. Если вы не используете сборщик мусора, при добавлении объекта в массив объект получает сообщение сохранения. Когда объект удаляется из изменяемого массива, он получает сообщение об освобождении. Если нет дальнейших ссылок на объект, это означает, что объект освобожден. Если ваша программа хранит ссылку на такой объект, ссылка станет недействительной, если вы не отправите объекту сообщение сохранения до его удаления из массива.

Нет смысла документировать это повторно для каждого метода.

...