iOSのメモリ管理に関しては間違いなく豊富な情報があります。それについて膨大な量を読んだのですが、特定の状況での「ベスト」プラクティスについてはまだはっきりしていません。以下の2つの例について説明を求めてもらえますか...
tableViewのデータソースとして機能するNSMutableArrayとeditButtonというUIBarButtonItemがあり、どちらも次のように宣言されています。
@interface MyTableViewController : UITableViewController {
NSMutableArray *datasourceArray;
UIBarButtonItem *editButton;
}
@property (nonatomic, retain) NSMutableArray *datasourceArray;
@property (nonatomic, retain) UIBarButtonItem *editButton;
@end
次に、それらを合成し、次のように割り当て/初期化しました。
@implementation
@syntesize datasourceArray, editButton;
-(void)viewDidLoad {
self.datasourceArray = [self retrieveDatasourceArray];
self.editButton = [[UIBarButtonItem alloc] initWithTitle:@"Edit" style:UIBarButtonItemStylePlain target:self action:@selector(editTable)];
[self.navigationItem setRightBarButtonItems:[NSArray arrayWithObjects:editButton, nil] animated:NO];
[editButton release];
}
-(void)retrieveDatasourceArray {
NSMutableArray *datasource = [[[NSMutableArray alloc] initWithObjects @"example1", @"example2", nil] autorelease];
return datasource;
}
-(void)dealloc {
[datasourceArray release];
[editButton release];
[super dealloc];
}
質問1:NSMutableArray
ご覧のとおり、実際の配列の作成を別の方法に分けました。これは、コアデータから取得して並べ替えが行われているため(この質問では不要)、分離したかったためです。したがって、自動リリースされるNSMutableArrayを返し、これをヘッダーファイルで定義されているself.datasourceArrayに設定することを選択しました。これは、これを実装するための賢明でリークのない方法ですか?
質問2:編集ボタン
後でeditButtonのタイトルとスタイルを変更する必要があるので、それにアクセスする必要があります。したがって、それを宣言します。次に、viewDidLoadメソッドで割り当て/初期化し、配列に追加してから(ここには表示されていない他のいくつかのボタンを使用)、この配列を使用してナビゲーションバーにボタンを追加します。次に、editButtonを割り当てて配列に渡したので、editButtonを解放しました。これは必要または不可欠ですか、それとも私のdeallocメソッドを考えると正しい場所にありますか?
よろしくお願いします
編集:さらなる質問3:
コードの他の場所でこれらのivarのいずれかにアクセスする場合(たとえば、[datasourceArray count]を呼び出す場合、または[編集]ボタンのタイトルを[完了]にリセットする場合、self。notationを使用する必要がありますか?
編集:さらなる質問4:
他の場所では、次のコードを使用して、合成されたNSMutableArrayを初期化しました。以下の答えを考えると、これはもっと漏れやすいですか...?
[self setDatasourceArray: [[NSMutableArray arrayWithArray: [self retrieveDatasourceArray]];