哪一种更好的做法?
A)稍后自己保留并释放物品
NSMutableArray* array = [[self getArray] retain];
....
[array release];
B)从返回对象的函数中自动释放
getArray {
NSMutableArray* returnedArray = [[[NSMutableArray alloc] init] autorelease];
.....
return returnedArray;
}
答案 0 :(得分:4)
关于Objective-C中的内存管理,最简单的经验法则是你应该释放你明确分配(alloc),复制(复制),newed up(新)或保留(retain)的任何东西。
释放应在上述行动的范围内完成。如果为方法返回的对象分配空间,则应在返回之前自动释放它。因此,考虑到您提供的两个选项,B是推荐的做法。
答案 1 :(得分:2)
如果要返回对象,则必须使用第二种方法。在可能的情况下,您应该使用retain-release方法,因为这会占用更少的内存。
答案 2 :(得分:1)
您可以在内存management和performance上阅读并遵循Apples指南。
我个人认为选择一种方式的原因是:
使用Autorelease专业人士:
缺点:
使用retain / release pros:
缺点:
我认为,无论您选择哪种风格,都取决于您的代码所处的情况,并根据专业人士和骗局选择最佳风格。我认为没有任何一个答案。
答案 3 :(得分:0)
new
,alloc init
,retain
或copy
(NARC)是对象,则必须将其释放。release
该对象。retain
。一些意见:
示例:
// created with autoreleased, just call retain if you intend to keep it
NSString *orange = [NSString stringWithString:@"orange"];
// created for the caller, you'll have to release it when you are done
NSObject *apple = [NSString initWithString:@"apple"];