我使用这些工具在我的iphone应用程序中查找泄漏,我发现我的密码在我的代码中泄漏了
tableViewController.dataSource = [[NSMutableArray alloc] initWithArray:[subjects_dic allKeys]];
属性dataSource定义为retain。 这是一个错误吗?!
答案 0 :(得分:4)
分手:
NSMutableArray *mutArray = [[NSMutableArray alloc] initWithArray:[subjects_dic allKeys]];
[tableViewController setDataSource:mutArray];
[mutArray release];
它与用于从导航控制器创建,推送和释放视图的模式相同。
答案 1 :(得分:2)
如果您在属性声明中指定了retain,那么您将保留分配给该属性的任何内容。
因此,在您的示例中,您有两个选择:
您可以简单地使用[NSMutableArray arrayWithArray:[subjects_dic allKeys]];
设置后释放属性一次。这个选项并不是一个好主意,因为如果将来更改属性的内存管理并且忘记了此版本,它可能会导致崩溃。
我建议选项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];