目标中的内存管理-c

pra*_*mca 2 iphone memory-management objective-c

我在我的一个课程中有这个代码:

- (void) processArray
{

   NSMutableArray* array = [self getArray];
   . . .
   [array release];
   array  = nil;
}


- (NSMutableArray*) getArray
{
   //NO 1:
   NSMutableArray* array = [[NSMutableArray alloc]init];

   //NO 2:
   NSMutableArray* array = [NSMutableArray array];
   . . .
   return array;
}
Run Code Online (Sandbox Code Playgroud)

NO 1:我创建一个数组并将其返回.在processArray方法中我释放它.

NO 2:我通过简单地打电话得到一个数组array.因为我不是这个的拥有者,所以我不需要在processArray方法中释放它.

哪个是最佳选择,NO 1还是NO 2?或者有更好的解决方案吗?

Fel*_*xyz 7

该方法应该返回一个自动释放的数组,NO 2是更好的选择.原因是当你用方法调用方法时

   NSMutableArray* array = [self getArray];
Run Code Online (Sandbox Code Playgroud)

作为惯例,你会期望不必释放数组.如果你想拥有它,你保留它,但否则你不应该关心它.在Cocoa中,您只能通过显式发送alloc或retain或copy(或new)获取所有权.由于该processArray方法不这样做,因此不必关心释放数组.

所以你应该使用NO 2,你也应该删除这两行:

[array release];
array  = nil;
Run Code Online (Sandbox Code Playgroud)