0

释放您使用副本创建的数组的正确方法是什么?我有一个以 NSMutableArray 作为参数的函数 createDoc。我得到内存泄漏,因为我相信复制分配内存。

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

2 回答 2

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];
于 2012-05-10T19:53:58.270 回答
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.

于 2012-05-10T19:52:13.857 回答