内存泄漏与NSUserDefaults和NSMutableArray

时间:2010-12-19 22:27:27

标签: objective-c ios cocoa memory-management memory-leaks

我从存储在NSUserDefaults中的数据定义了一些NSMutableArrays,如下所示:

    nameArray = [[[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"names"]]mutableCopy];

我将以dealloc发布。

nameArray在@interface的视图控制器头文件中定义,因为它的范围应该是整个类。

似乎存在与之相关的内存泄漏(Instruments漏电工具告诉我)。

有人看到我正在做的可能会导致泄漏的任何问题吗?

1 个答案:

答案 0 :(得分:3)

摆脱mutableCopy调用,你不需要它,因为你已经alloc/initNSMutableArray

nameArray = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"names"]];

mutableCopy是罪魁祸首,因为它会增加接收者的保留计数(已经是1),因此当您在release方法中调用-dealloc时,保留计数会减少到1,而不是0。

您不需要调用mutableCopy,因为您将数组传递给NSMutableArray初始值设定项,这将初步使您的新数组变为可变。