iOS阵列复制,如何发布?

时间:2012-05-10 19:49:41

标签: ios memory-management

发布使用copy创建的数组的正确方法是什么?我有一个函数createDoc,它将NSMutableArray作为参数。我得到了内存泄漏,因为我相信copy会分配内存。

doc = [getDoc createDoc: [[array subarrayWithRange:NSMakeRange(2, 5)] copy] ];

2 个答案:

答案 0 :(得分:1)

试试这个

doc = [getDoc createDoc: [[[array subarrayWithRange:NSMakeRange(2, 5)] copy] autorelease]];

甚至更好

NSArray *subArray = [[array subarrayWithRange:NSMakeRange(2, 5)] copy]];
doc = [getDoc createDoc:subArray];
[subArray release];

答案 1 :(得分:0)

你会发布副本。就是这样。

NSArray * copy = [[array subarrayWithRange:NSMakeRange(2, 5)] copy];
doc = [getDoc createDoc:copy];
[copy release];

但是 - 你想要的是一个可变副本,如果这是参数所需要的:

NSMutableArray * copy = [[array subarrayWithRange:NSMakeRange(2, 5)] mutableCopy];
  ^^^^^^^                                                            ^^^^^^^^^^^
doc = [getDoc createDoc:copy];
[copy release];

在大多数情况下更好的方法是将参数声明为数组,而不是让对象getDoc创建其mutableCopy