Я медленно изучаю разработку для iPhone и, похоже, продолжаю бить по стенам, где я не могу понять, как сделать то, что я хочу сделать правильно: (
По сути, мне нужен класс, который обрабатывает все взаимодействия со слоем данных, например, получает изменяемый массив некоторого списка объектов из хранилища данных.
Это довольно тривиально на других языках, где у вас есть сборщик мусора, но в Objective-C на iPhone я не уверен, что делать.
Это пример метода для класса DataFactory, который мы создавали. Обратите внимание на комментарий о том, где мы не уверены, когда выпустить ....
- (NSMutableArray*)fetchAllDrivers{
NSMutableArray *results = [[NSMutableArray alloc] init];;
if (self.appDelegate != nil) {
NSManagedObjectContext *context = [self.appDelegate managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:context];
[request setEntity: entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects: sortDescriptor, nil];
[request setSortDescriptors: sortDescriptors];
[sortDescriptors release];
[sortDescriptor release];
NSError *error;
results = [[context executeFetchRequest:request error:&error] mutableCopy];
if (results == nil) {
//something went wrong
}
//Where should this be released??? Certainly not here!
[results release];
[request release];
}
else {
[NSException raise:@"Can't fetch b/c app delgate is nil!" format: @"!!!"];
}
return results;
}
Телефонный код, связанный с моим комментарием:
NSMutableArray* arr = [dataFactory fetchAllDrivers];
[arr retain];
//Some code where we use arr
[arr release];