Использование авто-релиза и сохранения
У меня простой вопрос. Работает ли авто-релиз, когда количество сохраняемых данных велико?
например... Если я нахожусь в контроллере представления и делаю следующее:
[self retain];
[self retain];
[self retain];
[self retain];
[self autorelease];
Если я выскажу представление, оно будет выпущено?
Благодарю.
1 ответ
Авто-релиз просто добавляет объект в пул авто-релиза. Когда пул автоматического освобождения освобождается, сообщение об освобождении отправляется объекту и всем остальным объектам в этом пуле. Если ваш счет удержания по-прежнему больше нуля и вы больше не выпускаете, у вас будет утечка памяти.
Я считаю, что если вы сделаете, как вы сказали выше, у вас будет счет 5 (один из отведенного, а 4 из четырех - у вас выше). Вы добавили объект в очередь автоматического выпуска, чтобы позже он получил выпуск и уменьшил количество сохраненных объектов на единицу. Наконец, появление представления должно уменьшить его еще на одно. Это оставило бы количество отсчетов 3. Поэтому я думаю, что у вас будет утечка памяти.
Однако если вы используете iOS 5, последний компилятор использует ARC (автоматический подсчет ссылок), и вам не нужно беспокоиться об этой проблеме. Ну по большей части.
ИЗМЕНЕНО: исправлено, когда объектам отправляется релиз из пула автоматического выпуска. См.: Расширенное управление памятью Извините за неверную информацию.