2010-08-23 126 views
0

我使用的工具,以找到泄漏在我的iPhone应用程序和我发现我有在这条线的泄漏在我的代码NsMutable阵列保留计数

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

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

回答

4

打破它:

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

这是你用来创建,推搡,并释放从导航控制器查看相同的模式。

2

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

在你的榜样

所以,你有两个选择:

  1. 而不是创造与分配/初始化方法一个新的数组,你可以简单的设置后使用[NSMutableArray arrayWithArray:[subjects_dic allKeys]];

  2. 发布的财产,一旦它。这个选项并不是一个好主意,因为如果该属性的内存管理在将来发生变化并且这个版本被遗忘了,它可能会导致崩溃。

我建议选择1

1

另一种选择:

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