Управление памятью Objective-C (alloc и autorelease) - PullRequest
5 голосов
/ 29 января 2010

Когда вы выделяете и инициализируете объект, а затем хотите вернуть этот объект, как вы должны его вернуть?

У меня есть следующий код:

NSXMLDocument* fmdoc = [[NSXMLDocument alloc] initWithContentsOfURL:trackInfoUrl
    options:NSXMLDocumentTidyXML error:&err];  
return [fmdoc autorelease];

Это правильно?

1 Ответ

4 голосов
/ 29 января 2010

Это правильно. Поскольку вы инициализируете объект, вы обязаны освободить или автоматически выпустить его.

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

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

...