NsMutablearray保留计数

时间:2010-08-23 13:23:42

标签: iphone nsmutablearray

我使用这些工具在我的iphone应用程序中查找泄漏,我发现我的密码在我的代码中泄漏了

  

tableViewController.dataSource = [[NSMutableArray alloc] initWithArray:[subjects_dic allKeys]];

属性dataSource定义为retain。 这是一个错误吗?!

3 个答案:

答案 0 :(得分:4)

分手:

NSMutableArray *mutArray = [[NSMutableArray alloc] initWithArray:[subjects_dic allKeys]];
[tableViewController setDataSource:mutArray];
[mutArray release];

它与用于从导航控制器创建,推送和释放视图的模式相同。

答案 1 :(得分:2)

如果您在属性声明中指定了retain,那么您将保留分配给该属性的任何内容。

因此,在您的示例中,您有两个选择:

  1. 您可以简单地使用[NSMutableArray arrayWithArray:[subjects_dic allKeys]];

  2. ,而不是使用alloc / init方法创建新数组
  3. 设置后释放属性一次。这个选项并不是一个好主意,因为如果将来更改属性的内存管理并且忘记了此版本,它可能会导致崩溃。

  4. 我建议选项1。

答案 2 :(得分:1)

另一种选择:

// mutableCopy implicitly retains the array returned by allKeys
NSMutableArray *mutArray = [[subjects_dic allKeys] mutableCopy];
[tableViewController setDataSource:mutArray]; // @property dataSource retains mutArray
[mutArray release];