我已经创建了一个ipad应用程序,现在我正在使用Instruments进行一些测试,以发现内存泄漏和其他问题。
我发现了一些漏洞,但我无法理解为什么它们被认为是内存泄漏...有人可以帮我理解吗?
NSMutableArray *secondArray = [NSMutableArray arrayWithArray:firstArray];
为什么这是内存泄漏?它不会创建一个自动释放的阵列吗?
答案 0 :(得分:3)
arrayWithObjects
会产生一个自动释放的数组,但arrayWithArray
会在firstArray
中保留secondArray
,之后不会释放firstArray
。
答案 1 :(得分:2)
确实如此!但是firstArray怎么样?你将它保留在secondArray中而不复制它。所以你应该像这样发布firstArray
NSArray *firstArray = [NSArray alloc] init];
...
NSMutableArray *secondArray = [NSMutableArray arrayWithArray:firstArray];
[firstArray release];
答案 2 :(得分:0)
好吧,我仍然写下我的答案。
此行没有内存泄漏。您创建secondArray
并指向firstArray
中的相同对象。 arrayWithArray返回自动释放的对象,因此您不必释放它。
但我想分析器说这里有一个潜在的情况,当你有一个指向一个对象的多个指针。当你释放firstArray时,secondArray将引用未定义的内存。它可以导致SIGABRT。