Вот некоторый код, который выдает исключение из-за некоторого управления памятью, которое я делаю:
Файл моего заголовка:
@property(nonatomic, retain) NSMutableArray *holderArray;
Файл моей реализации:
@synthesize holderArray
-(void) viewDidLoad{
holderArray = [[NSMutableArray alloc] init];
[self addSampleObject];
}
-(void) addSampleObject{
[holderArray addObject:[self createSampleObject]];
}
-(ModelObject *) createSampleObject{
ModelObject *mObj = [[ModelObject alloc] init];
// Set a few properties
return [mObj autorelease];
}
Что должно происходить в этом контексте?createSampleObject
автоматически выпускает объект в какой-то момент, тогда как [holderArray addObject]
увеличивает счетчик ссылок для этого объекта на 1. Из того, что я понимаю, все должно быть хорошо.
Но когда получатель получает доступ к этому элементу, яполучаю следующее исключение.Он исчезает, если я удаляю autorelease stmt при создании объекта модели -
#0 0x012525a8 in objc_exception_throw ()
#1 0x010f36e5 in -[__NSArrayM objectAtIndex:] ()
Я упускаю что-то фундаментальное о том, как работает autorelease?
Спасибо,Теджа.
РЕДАКТИРОВАТЬ: На самом деле вы правы, есть совершенно не связанный кусок моего кода, который выдает эту ошибку.Я думал, что единственное, что я изменил из рабочего, это добавление оператора autorelease
.
Спасибо!