NSArrayまたはNSDictionaryを返すために、ほとんどの人が以下の実装を使用しているのを見てきました。これは、一部の本が示唆していることでもあります。(iOS開発実用的なアプローチ-)
オプション1
-(NSArray*)listOfStudents{
NSMutableArray *temp = [[NSMUtableArray alloc] init];
//Add elements to the array
//
//
//
NSArray *students = [NSArray arrayWithArray:temp];
return students;
}
-(void)viewWillAppear{
self.studentsList = [self listOfStudents];
}
しかし、これは以下の方法でも同じことができますか?
オプション2
-(NSArray*)newListOfStudents{
NSMutableArray *temp = [[NSMUtableArray alloc] init];
NSArray *students = [[NSArray alloc]initWithArray:temp];
[temp release];
//Add elements to the array
//
//
//
return students;
}
-(void)viewWillAppear{
NSArray *array = [self newListOfStudents];
self.studentsList = array;
[array release];
}
これらのメソッドがメインスレッド自体で呼び出されると想定します。
メモリ使用量の中間、2番目のオプションは、自動解放されたオブジェクトが作成されないため、自動解放プールが空になったときにのみ解放されるため、適切だと思います。
メインの自動解放プールは、アプリが終了したときにのみ排出されると思います。したがって、OPTION 1のメソッドが何度も使用される場合(ViewWillAppearで呼び出されるため)、アプリが終了したときにのみ解放される自動解放プールに多くのリストが含まれると思います。
では、オプション2のアプローチはより良いアプローチですか?
アップデート:
わかりやすくするために、viewWillAppearの実装を更新しました。