Задача c авто-выпуском вопроса - PullRequest
1 голос
/ 19 мая 2011

Привет, у меня быстрый вопрос по автозапуску.Я в принципе понимаю, как это работает, но мне было интересно, если следующее приведет к утечке памяти.

NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

NSString* string = [[[NSString alloc] init] autorelease];
[[string retain] autorelease];

[pool drain];

Будет ли отправлена ​​строка два сообщения о выпуске?

Ответы [ 2 ]

6 голосов
/ 19 мая 2011

Думайте о своем взаимодействии с счетом сохранения объекта как о дельте.

Если вы увеличите его на единицу, вам нужно уменьшить его на единицу для того, чтобы этот объект был потенциально освобожден.

Так что - да - вы увеличили его на один в два раза и уменьшили на один в этом коде.Результатом станут два релиза на стоке.

2 голосов
/ 19 мая 2011

Это не приведет к утечке памяти, и вы правы, ему будет отправлено два сообщения об освобождении из пула автоматического выпуска. Пока у вас есть один выпуск / авто-релиз для каждого выделения / сохранения / копирования, вы не должны получать никаких утечек.

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