2012-04-25 53 views
0

下面是我的代碼:檢測潛在的泄漏通過分析

UIImage *takePhotoImg = [UIImage imageNamed:@"add_pic.png"]; 
    self.takePhoto = [[UIButton alloc] initWithFrame:CGRectMake(120, 100, takePhotoImg.size.width, takePhotoImg.size.height)]; 
    [_takePhoto setImage:takePhotoImg forState:UIControlStateNormal]; 
    [_takePhoto addTarget:self action:@selector(takePhotoBtn) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:_takePhoto]; 

當我使用分析,它顯示的行:

[_takePhoto setImage:takePhotoImg forState:UIControlStateNormal]; 

分配對象的潛在泄漏。 我需要添加版本,還是忽略?
預先感謝您

更新: 我也已經發布按鈕_takePhoto在我的dealloc:

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

我的財產:

@property(nonatomic,retain)UIButton *takePhoto; 

回答

0

如果你不使用ARC然後是,你需要釋放它。當你將它添加到self.view的子視圖中時,self.view將保留它,以便按鈕不會消失。

如果您不需要訪問該按鈕並且不需要保存引用,則可以在撥打addSubview:後立即釋放該引用。

但是,它看起來像takePhoto是你的類的屬性。如果是這種情況,並且您希望持有對該按鈕的引用供以後使用,只需將[_takePhoto release]呼叫添加到您的類dealloc方法。這應該抑制代碼分析警告。

+0

查看更新,謝謝 – Tan 2012-04-25 02:35:23

+0

在這種情況下,請嘗試在示例的第2行使用'_takePhoto'而不是'self.takePhoto'。我相信使用'self.takePhoto'會有效地「雙重保留」(因爲屬性具有「保留」特性),這不是你想要的。 – gregheo 2012-04-25 02:45:09

0

變化碼:

self.takePhoto = [[UIButton alloc] initWithFrame:CGRectMake(120, 100,  takePhotoImg.size.width, takePhotoImg.size.height)]; 

self.takePhoto = [[[UIButton alloc] initWithFrame:CGRectMake(120, 100, takePhotoImg.size.width, takePhotoImg.size.height)] autorelease]; 

[_takePhoto釋放]在delloc方法是用於在設置器方法中的保留。每次你打電話給self.takePhoto = aNewTakePhote時,一個NewTakePhote會保留一次。