Objective-C Управление памятью - PullRequest
0 голосов
/ 07 апреля 2011

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

Скажем, у меня есть фабричный метод для класса, который возвращает объект с автоматическим освобождением:

+(id)queueWithDelegate:(id)aDelegate {
    return [[[self alloc] initWithDelegate:aDelegate] autorelease];
}

Когда я вызываю эту функцию и получаю мой queue объект, я должен явно retain его или же простой факт, что я назначаю его переменной , делает это?

MyQueue q = [MyQueue queueWithDelegate:self]; // Does this need to be retained?

Или я путаю это со свойствами? Если у меня есть свойство, подобное:

@property (nonatomic, *retain*) myQueue;
// Does the "retain" part of the property mean it's going to automatically add
// to the retain count?

self.myQueue = [MyQueue queueWithDelegate:self]; // Do I need to call retain?

Думаю, моя проблема в том, что я перепутал свойства с локальными переменными. Спасибо за понимание.

1 Ответ

3 голосов
/ 07 апреля 2011

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

//self.xxxx is how you use the property and if retain is set it it will retain your queue
//likewise if copy were set it would copy the queue if possible
self.myQueue = [MyQueue queueWithDelegate:self];

Донг следующий

MyQueue q = [MyQueue queueWithDelegate:self];

не сохранит вашу очередь автоматически, поскольку ожидается, что автоматически выпущенный объект будет возвращен queueWithDelegate:. Очередь в этой точке находится в пуле автоматического выпуска и будет действительной в вызываемой функции, так как ожидается, что она будет очищена не позднее начала следующего цикла выполнения.

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

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