毫无疑问,有大量的信息:iOS 中的内存管理。在阅读了大量有关它的内容后,我仍然不清楚某些情况下的“最佳”实践。请我在下面的两个例子中寻求澄清......
我有一个 NSMutableArray 它充当 tableView 的数据源和一个名为 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,因为我已经分配了它并将它交给了一个数组。考虑到我的 dealloc 方法,这是必要的还是必要的,甚至是在正确的地方?
提前谢谢了
编辑:进一步的问题3:
在我的代码中的其他地方访问这些 ivars 时(比如调用 [datasourceArray count] 或将“编辑”按钮的标题重置为“完成”时,我是否应该使用 self.notation?
编辑:进一步的问题4:
在其他地方,我使用以下代码来初始化合成的 NSMutableArray。鉴于以下答案,这是否更泄漏......?
[self setDatasourceArray: [[NSMutableArray arrayWithArray: [self retrieveDatasourceArray]];