0

我仍然試圖通過iPhone SDK的內存管理找到自己的方式,但我不確定爲什麼Instruments會報告某段代碼作爲內存泄漏。我遵循了這些代碼部分的教程,所以我不確定我做錯了什麼。爲什麼Instruments報告定製的UITableViewCell代碼爲內存泄漏?

的代碼違反塊:

DreamTableCell *cell = (DreamTableCell *)[tableView dequeueReusableCellWithIdentifier:cellID]; 
if (cell == nil) 
    cell = [[[DreamTableCell alloc] initWithFrame:CGRectZero reuseIdentifier:cellID] autorelease]; 

此外,還有DreamTableCell的定製方法,其中的UITableViewCell的NIB文件被加載,沒有什麼異常,因爲據我所知:

- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier { 
    NSArray *objs = [[NSBundle mainBundle] loadNibNamed:@"DreamTableCell" owner:nil options:nil]; 
    for (id item in objs) 
     if ([item isKindOfClass:[DreamTableCell class]]) { 
      self = item; 
      break; 
     } 
    return self; 
} 

什麼導致這裏的內存泄漏 - 我錯過了什麼?

回答

3

這行:

self = item; 

你設置self到一個新的實例變量,因爲你在init是,現有的實例被創建。你需要釋放全新的自我之前,你把它設置爲別的:

[self release]; 
self = item; 
+0

唉,我不知道我是如何錯過了:P謝謝。 – 2009-09-20 21:24:05

相關問題