Отправляет ли коллекция сообщение -release всем объектам, которые она содержит, если я отправляю ей -release? - PullRequest
2 голосов
/ 27 апреля 2009

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

Но последнее, что не всегда может произойти, как говорит яблоко. Система решает, стоит ли ее освобождать или нет. В большинстве случаев это будет, но в некоторых случаях нет.

Так что мне интересно, может ли коллекция вызвать утечки памяти, как это? И когда он освобождает все свои объекты в сообщении -release самой коллекции, тогда он должен фактически сохранять все объекты внутри коллекции, как только я сохраню саму коллекцию.

Помогите мне получить четкое представление об этом. Спасибо!

Ответы [ 2 ]

8 голосов
/ 27 апреля 2009

Когда вы добавляете объект в коллекцию, он сохраняется коллекцией до тех пор, пока он не будет удален или коллекция не будет освобождена. Последующие сообщения о сохранении или выпуске, отправленные в коллекцию, не изменяют количество сохраняемых объектов в коллекции.

Другими словами, думайте об этом с точки зрения владения, а не подсчета удержаний.

4 голосов
/ 27 апреля 2009

При отправке объекта релиз сбрасывает счетчик хранения. Когда его количество отсчетов достигает нуля, оно уничтожается. Когда контейнер уничтожается (не освобождается), его объекты освобождаются (но если их счет хранения не равен нулю по другим причинам, не уничтожается).

Краткий ответ: все будет работать так, как вы ожидаете, ваша проблема в том, что вы рассматриваете «освобожденный» как означающий «уничтоженный». Они разные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...