私はゆっくりと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];