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?或者有更好的解决方案吗?
该方法应该返回一个自动释放的数组,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)