iOS阵列拷贝,如何发布?

iOS阵列拷贝,如何发布?,ios,memory-management,Ios,Memory Management,释放使用copy创建的阵列的正确方法是什么?我有一个函数createDoc,它将NSMutableArray作为参数。我得到一个内存泄漏,因为我相信复制分配内存 doc = [getDoc createDoc: [[array subarrayWithRange:NSMakeRange(2, 5)] copy] ]; 你会发布副本的。就这些 NSArray * copy = [[array subarrayWithRange:NSMakeRange(2, 5)] copy]; doc = [g

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

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

你会发布副本的。就这些

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

试试这个

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

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

为什么要创建阵列的副本?那没必要。