Objective c 如何释放即将返回但不返回其中对象的NSMutableArray?
在下面的代码中,我传递对象以在此方法中重置一些数据,这些数据由NSMutableArray包含。很好,代码可以工作 但当我使用Xcode构建和分析时,它会警告我*newObjs的“潜在泄漏”。 如果我加上自动释放。我会把我的东西丢在里面以备将来使用 我该怎么办Objective c 如何释放即将返回但不返回其中对象的NSMutableArray?,objective-c,xcode,memory-leaks,Objective C,Xcode,Memory Leaks,在下面的代码中,我传递对象以在此方法中重置一些数据,这些数据由NSMutableArray包含。很好,代码可以工作 但当我使用Xcode构建和分析时,它会警告我*newObjs的“潜在泄漏”。 如果我加上自动释放。我会把我的东西丢在里面以备将来使用 我该怎么办 -(NSMutableArray*)resetNotGivenDrugs:(NSMutableArray *)drugObjs{ NSMutableArray *newObjs = [[NSMutableArray alloc]init
-(NSMutableArray*)resetNotGivenDrugs:(NSMutableArray *)drugObjs{
NSMutableArray *newObjs = [[NSMutableArray alloc]init];
//i can't release this though i have objects still need to be use inside
for(Drug *drug in drugObjs){
// some process to modify the Drug object that i don't want to be release
[newObjs addObject:drug];
}
return newObjs;
}
您应该返回
[newObjs autorelease]
而不是newObjs
,因为该方法建议将返回自动删除的对象(标题中不包含new或init等)。在自动释放池耗尽之前(通常)不会丢失对内部对象的引用,直到运行循环结束
如果需要保留返回的数组,
retain
将其保留在调用方法中,但正如我所说,在完成执行之前,不会释放数组和内容。这就是自动释放的要点 为什么要返回新数组?如果您只是在更改属性,如果druge
,那么它们将反映在drugObjs
中,因此[drugObjs isEqual:newObjs]
是正确的
关于内存问题,您应该自动释放newObjs
。如果调用方需要在调用函数结束后保留它,则调用方应保留它。问题已解决!正如我所说,我已经尝试在返回之前使用[newObjs autorelease]。我没有试图以这种方式返回!非常感谢。因为我也需要过滤掉一些对象,我不想直接编辑原始对象。