发布使用copy创建的数组的正确方法是什么?我有一个函数createDoc,它将NSMutableArray作为参数。我得到了内存泄漏,因为我相信copy会分配内存。
doc = [getDoc createDoc: [[array subarrayWithRange:NSMakeRange(2, 5)] copy] ];
答案 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
。