Я пытаюсь понять, когда нужно называть autorelease, и что это будет делать с моим объектом.
После чтения Об управлении памятью в Mac Developer Library я понял, что когда у вас есть метод, который действует как метод factory - по создавая новый объект и возвращая его - метод не имеет способа освободить объект перед его возвратом, потому что это приведет к возврату возвращаемого объекта.
Пример
- (Test *) createNewTest
{
Test *newInstance = [[Test alloc] init];
[newInstance release];
return newInstance; // deallocted object returned.
}
Вместо этого я должен использовать autorelease
:
Метод автоопределения, определенный NSObject, отмечает приемник для последующего выпуска
Мой вопрос: если объект должен быть выпущен позже, как узнать, когда он будет выпущен?
- (Test *) createNewTest
{
Test *newInstance = [[test alloc] init];
[newInstance autorelease];
return newInstance;
}
- (void) runIt
{
Test *myInstance = [self createNewTest];
// when is myInstance released?? and thereby not valid to my function anymore?
}
Как я могу безопасно использовать возвращенный объект с автореализацией внутри моего метода runIt
, если я не знаю, когда происходит автоматическое оповещение? Должен ли я сохранить объект, возвращенный createNewTest
? Или я могу безопасно использовать его в пределах runIt
?