释放您使用副本创建的数组的正确方法是什么?我有一个以 NSMutableArray 作为参数的函数 createDoc。我得到内存泄漏,因为我相信复制分配内存。
doc = [getDoc createDoc: [[array subarrayWithRange:NSMakeRange(2, 5)] copy] ];
释放您使用副本创建的数组的正确方法是什么?我有一个以 NSMutableArray 作为参数的函数 createDoc。我得到内存泄漏,因为我相信复制分配内存。
doc = [getDoc createDoc: [[array subarrayWithRange:NSMakeRange(2, 5)] copy] ];
试试这个
doc = [getDoc createDoc: [[[array subarrayWithRange:NSMakeRange(2, 5)] copy] autorelease]];
甚至更好
NSArray *subArray = [[array subarrayWithRange:NSMakeRange(2, 5)] copy]];
doc = [getDoc createDoc:subArray];
[subArray release];
你会释放副本。就这样。
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
.