iOS阵列拷贝,如何发布?
释放使用copy创建的阵列的正确方法是什么?我有一个函数createDoc,它将NSMutableArray作为参数。我得到一个内存泄漏,因为我相信复制分配内存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
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];
为什么要创建阵列的副本?那没必要。