Ответственный за его создание и вызывающий 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 объем?

Ответы на вопрос(3)

Ваш ответ на вопрос