Я пытаюсь лучше понять управление памятью. Если у меня есть функция, которая возвращает autorelease NSArray, как это
// DataClass
- (NSArray *)getData {
NSMutableArray *array = [[[NSMutableArray alloc] init] autorelease];
// do some stuff to get data from sqlite
return array;
}
затем в другом файле класса, я хочу использовать этот getData. У меня есть собственность
@property (nonatomic, retain) NSArray *myData;
- viewDidLoad {
NSMutableArray *data = [[NSMutableArray alloc] init];
data = [DataClass getData];
self.myData = data;
[data release];
}
Почему в этом случае возникает ошибка неверного доступа? Я знаю, что это из-за [выпуска данных], но я подумал, что, поскольку метод getData возвращает авто-релиз NSArray, и так как я инициализирую новый NSMutableArray с помощью alloc / init, то мне нужно его освободить? Или происходит то, что происходит, даже если я инициализирую данные с помощью alloc / init, тогда я даже не использую их, потому что с помощью оператора data = [DataClass getData] я указываю на другой NSArray, а затем пытаюсь освободить этот уже автоматически выпущенный NSArray из getData, а затем данные NSMutableArray все еще где-то плавают в памяти? Заранее спасибо.