2012-07-13 89 views
0

我在xcode中使用了分析功能,並且我已經修復了除此之外的所有內容。不明白潛在的泄漏

我想知道這是什麼意思「潛在的泄漏對象分配」,它是指這些行。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

self.type_prod = [[ProductType alloc] initWithNibName:@"ProductType" bundle:[NSBundle mainBundle]]; 

NSString *prodtitle = [product objectAtIndex:indexPath.row]; 
    type_prod.prodtitle = prodtitle; 

etc etc. 

在這一空白結束時,我說:

[[self navigationController] pushViewController:type_prod animated:YES]; 
[type_prod release]; 

那麼,爲什麼它說有一個潛在的泄漏,如果我在最後釋放呢?

+0

[ProductType頁頭] = 1保留計數 self.type_prod + 1 [type_prod發佈] - 1 – VenoMKO 2012-07-13 17:49:05

+0

我明白我的保留數爲1,因爲我的Alloc,但由於我釋放它,它會是1-1 = 0(至少這是我的想法)。但事實證明,self.type_prod增加其保留計數+1? – Prastow 2012-07-14 15:35:45

+0

我想你的保留數是2 self.type_prod最有可能使用保留。 – VenoMKO 2012-07-14 15:38:53

回答

1

我假設type_prod是一個保留屬性。你需要在dealloc方法中使用self.type_prod = nil來釋放它。

還要確保在所有情況下都會執行最後的版本。它是安全的自動釋放它的時候了:

self.type_prod = [[[ProductType alloc] initWithNibName:@"ProductType" bundle:[NSBundle mainBundle]] autorelease]; 
+0

我像你說的那樣放在autorelease中,並且在void的末尾我改變了[type_prod release]; self.type_prod = nil。因爲我有一個autorelease,我假設我不需要在self.type_prod = nil之前發佈一個版本,對吧?是否有必要[type_prod release];在 - (void)dealloc中?我很難理解自我的概念。 – Prastow 2012-07-14 15:33:50

+0

如果你的autorelease像我在我的回答中所說的那樣,那麼你不能在方法中再次釋放伊娃。在dealloc中釋放self.type_prod = nil是必要的。這與[self setType_prod:nil]是一樣的。 – Felix 2012-07-14 19:41:13

+0

謝謝,我現在修好了! – Prastow 2012-07-15 00:48:53