簡體   English   中英

保留的內存管理問題

[英]Memory management issue with retain

當您擁有保留在接口中的屬性並在代碼中的某個位置分配時,是否需要在代碼中釋放它以及在dealloc方法中釋放它,即保留計數為2?

從界面:

NSMutableData *xmlData;
@property (nonatomic, retain) NSMutableData *xmlData;

從實現:

@synthesize xmlData;

- (void)dealloc
{
    [xmlData release];
    [super dealloc];
}

xmlData = [[NSMutableData alloc] init]; 

您需要在dealloc中release它。

如果在設置時需要retain它,則取決於您如何做。

如果直接執行此操作,則需要保留它:

xmlData = [[NSMutableData alloc] init];

如果使用setter,它將自動完成,因此需要釋放它(如果未自動釋放):

NSMutableData *data = [[NSMutableData alloc] init];
self.xmlData = data;
[data release];

不知道,但我知道如何找出答案,如果您通過XCode Profiler運行並選擇“分配”,它將列出每個對象的計數。

在您的示例中,您只需要在-(void)dealloc;中釋放ivar;

我的做法是僅通過Accessor / Mutator(獲取器/設置器)訪問ivars,因此,當我分配和初始化ivar時,請執行以下操作。

NSMutableData *lXMLData = [[NSMutableData alloc] init];
self.xmlData = lXMLData;
[lXMLData release];

我發現它可以使一切井井有條,平衡

我也看過

self.xmlData = [[[NSMutableData alloc] init] autorelease]

(但我不是粉絲)

我的方法...

  • 僅通過訪問器/誘變器訪問ivars
  • 分配/初始化本地變量
  • 將本地var分配給ivar(類變量)
  • 發布本地變量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM