Ответственный за его создание и вызывающий runIt должны сохранить объект. Когда ответственный за это закончил, он должен выпустить объект.
аюсь понять, когда вызывать autorelease, и что это будет на самом деле делать с моим объектом.
После прочтенияОб управлении памятью в библиотеке разработчика Mac я понял, что когда у вас есть метод, который действует как фабричный метод - создавая новый объект и возвращая его - метод не может освободить объект перед его возвратом, потому что это приведет к освобождению объекта возвращается
пример
- (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
объем?