У меня есть некоторые сомнения относительно функции dealloc в программе iPhone. Требуется ли дать [выпуск self.object_name] или [выпуск object_name] в порядке? ..
У меня странная проблема в моей функции dealloc:
-(void) dealloc {
[self.listOfDates release];
[self.listOfDescriptions release];
[super dealloc];
}
Но программа падает, давая EXEC_BAD_ACCESS. Здесь оба объекта являются экземплярами NSMutableArray, выделенными с помощью alloc в функции init для класса. Та же функция без самоотдачи работает нормально, т.е.
-(void) dealloc {
[listOfDates release];
[listOfDescription release];
[super dealloc];
}
Вот как я объявил собственность
@property (nonatomic,retain) NSMutableArray *listOfDates;
@property (nonatomic,retain) NSMutableArray *listOfDescription;
В файле реализации я систематизировал это, и внутри функции init я выделил эти переменные следующим образом
self.listOfDates = [[NSMutableArray alloc] init];
self.listOfDescription = [[NSMutableArray alloc] init];
Так нужно ли отдавать себя? Что мне здесь не хватает?
Проблема устранена, когда я удалил функцию mutableCopy, которую я использовал для копирования экземпляра NSMutableArrays, которые были переданы в качестве аргумента функции init, как показано ниже
-(id)initWithDate:(NSMutableArray *)dates andDescription:(NSMutableArray*)descriptions
{
if(self = [super initWithNibName:@"DateDescriptionControl" bundle:nil])
{
self.listOfDates = [[NSMutableArray alloc] init];
self.listOfDescription = [[NSMutableArray alloc] init];
self.listOfDates = [dates mutableCopy];
self.listOfDescription = [description mutableCopy];
}
return self;
}
После удаления mutableCopy, сделка теперь не генерирует EXEC_BAD_ACCESS. Так, где я сделал ошибку, я все еще не могу понять: (