我一直在慢慢学习 iPhone 开发,似乎一直在碰壁,我无法弄清楚如何以正确的方式做我想做的事情:(
基本上,我想要一个类来处理与数据层的所有交互,例如,从数据存储中获取一些对象列表的可变数组。
这在你有垃圾收集器的其他语言中是非常微不足道的,但在 iPhone 上的 Objective-C 中,我不知道该怎么做。
这是我们正在创建的 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];