Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何释放即将返回但不返回其中对象的NSMutableArray?_Objective C_Xcode_Memory Leaks - Fatal编程技术网

Objective c 如何释放即将返回但不返回其中对象的NSMutableArray?

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包含。很好,代码可以工作

但当我使用Xcode构建和分析时,它会警告我*newObjs的“潜在泄漏”。 如果我加上自动释放。我会把我的东西丢在里面以备将来使用

我该怎么办

-(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]。我没有试图以这种方式返回!非常感谢。因为我也需要过滤掉一些对象,我不想直接编辑原始对象。