Когда объект с "autorelease" выпущен? - PullRequest
6 голосов
/ 18 июля 2009

Я разрабатываю для iPhone, цель-c. Когда мы используем autorelease, когда объект фактически освобождается - когда высвобождается основной пул autorelease (т. Е. Приложение завершается?) Или как только заканчивается локальная функция? Например, я хочу сделать что-то вроде этого:

- (void) test
{
    MyObj* p = [[[MyObj alloc] init] autorelease];
    ...

    // is p 'released' here?
}

Значит, 'p' высвобождается при выходе из функции или при освобождении пула автоматического выпуска этого потока? Я думал, что это когда выход из локальной функции, но я просто создал свой собственный поток и мне нужно было настроить пул авто-релиза, который дает мне второе мнение, когда это действительно произойдет ..

Спасибо

Ответы [ 2 ]

7 голосов
/ 18 июля 2009

Объект автоматического выпуска освобождается одновременно с пулом автоматического выпуска. Так что для вашего потока он будет освобожден, когда вы освободите пул. В главном потоке, если вы не создадите свой собственный, я полагаю, что пул автозапуска сливается каждый раз через цикл выполнения - но я давно не смотрел.

1 голос
/ 18 июля 2009

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

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