[英]iPhone: using retain vs autorelease
哪個是更好的做法?
A)稍后自己保留並釋放對象
NSMutableArray* array = [[self getArray] retain];
....
[array release];
B)從返回對象的函數中自動釋放
getArray {
NSMutableArray* returnedArray = [[[NSMutableArray alloc] init] autorelease];
.....
return returnedArray;
}
關於Objective-C中的內存管理,最簡單的經驗法則是,您應釋放任何已明確分配(分配),復制(復制),更新(新)或保留(保留)的內容。
釋放應在上述動作的范圍內完成。 如果為方法返回的對象分配空間,則應在釋放它之前自動釋放它。 因此,考慮到您提供的兩個選項,建議您使用B。
如果要返回對象,則必須使用第二種方法。 在所有可能的情況下,都應使用保留釋放方法,因為這會占用較少的內存。
我個人認為選擇其中一種方法的原因是:
使用自動發行專家:
缺點:
使用保留/發布專家:
缺點:
我認為,無論選擇哪種樣式,都取決於您的代碼所處的情況,並根據優缺點選擇最佳樣式。 我認為對此沒有任何答案。
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"];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.