Когда [[NSMutableData data] сохраняет] выпущен? - PullRequest
1 голос
/ 06 сентября 2011

Раньше я видел инструкцию [[NSMutableData data] retain] во многих кодах, но я не знаю, когда освобожденный объект будет освобожден ... Можете ли вы помочь мне понять?

Спасибо заранее,

Стефан

Ответы [ 3 ]

6 голосов
/ 06 сентября 2011

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

Ситуация, с которой вы, возможно, сталкивались, - это ситуация, когда люди назначают иварам напрямую;выпуск должен прийти через -dealloc - когда содержащийся объект будет уничтожен - или когда ивар будет переназначен.Но в любом случае вы должны помнить об этом, иначе ваш код утечет.

2 голосов
/ 06 сентября 2011

Это не так.Он пропускает.

[NSMutableData data] уже автоматически выпущен - он будет освобожден в конце текущего пула автоматического выпуска (т. Е. В конце текущей итерации цикла выполнения в большинстве случаев). Отправив ему -retain message, вы говорите, чтобы он задерживался немного дольше, но без соответствующего -release сообщения, он никогда не будет иметь счет сохранения 0 и поэтому никогда не будет освобожден.

1 голос
/ 06 сентября 2011

[NSMutable data] не будет выпущен, пока вы не отпустите его, когда добавите 1 к его счету сохранения. Используя [[NSMutable data] retain], вы добавляете единицу к его счету удержания, и, выпуская его, вы уменьшаете единицу с его счетом удержания. Поэтому, когда вы закончите использовать его (в методе dealloc), отпустите его.

...