【发布时间】:2010-08-23 13:23:41
【问题描述】:
我使用这些工具在我的 iphone 应用程序中查找泄漏,我发现我的代码中的这一行有泄漏
tableViewController.dataSource = [[NSMutableArray alloc] initWithArray:[subjects_dic allKeys]];
定义为retain的属性dataSource。 这是一个错误吗?!
【问题讨论】:
标签: iphone nsmutablearray
我使用这些工具在我的 iphone 应用程序中查找泄漏,我发现我的代码中的这一行有泄漏
tableViewController.dataSource = [[NSMutableArray alloc] initWithArray:[subjects_dic allKeys]];
定义为retain的属性dataSource。 这是一个错误吗?!
【问题讨论】:
标签: iphone nsmutablearray
分手:
NSMutableArray *mutArray = [[NSMutableArray alloc] initWithArray:[subjects_dic allKeys]];
[tableViewController setDataSource:mutArray];
[mutArray release];
这与您用于从导航控制器创建、推送和释放视图的模式相同。
【讨论】:
如果您在属性声明中指定了保留,那么您分配给该属性的任何内容都将被保留。
所以在你的例子中,你有两个选择:
您可以简单地使用[NSMutableArray arrayWithArray:[subjects_dic allKeys]];
设置后释放一次属性。此选项不是一个好主意,因为如果将来更改属性的内存管理并且忘记此版本,它可能会导致崩溃。
我推荐选项 1。
【讨论】:
另一种选择:
// mutableCopy implicitly retains the array returned by allKeys
NSMutableArray *mutArray = [[subjects_dic allKeys] mutableCopy];
[tableViewController setDataSource:mutArray]; // @property dataSource retains mutArray
[mutArray release];
【讨论】: