2011-11-24 54 views
1

我有UIImage出口在TableViewCell中,我將在稍後在UITableView中使用它。當我在儀器中檢查這個時,我在UIImageView上發現了一些內存泄漏。我沒有在UITableViewCell中釋放UIImageView,因爲如果我在tavleViewCell中釋放它,我會得到exc_bad_access。如何在UITableViewCell中釋放UIImageView?

我的問題是我在哪裏發佈這個UIImageView?

更新

CustomCell.h

@interface CustomCell : UITableViewCell { 
IBOutlet UIImageView *customImage; 
} 

@property(nonatomic, retain) UIImageView *customImage; 

@end 

CustomViewController.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *CellIdentifier = @"CustomCell"; 
CustomCell *cell = (CustomCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

cell.customImage.hidden = [[self.customImageList objectAtIndex:indexPath.row] boolValue]; 

return cell; 
} 
+0

據我所知,你使用的是一個UITableViewCell子類。你應該使用它的代碼,包括接口定義。 – vikingosegundo

+0

您應該釋放該單元在dealloc中擁有的對象。該版本不應該得到例外。如果您發現異常,則代碼中的保留/發佈餘額有問題。 – progrmr

回答

0

UITableView緩存單元以備後用。這顯示爲內存泄漏,但最終可以重用該單元,以便它不會真正泄漏。

您可以做的是釋放由您的自定義UITableViewCell在單元格滾動屏幕時保留的imageview,但如果滾動時再次需要該圖像,則可能導致性能問題。

+0

我想這解釋了這個問題。謝謝,我會保持原樣。 – HardCode

+0

只要你不給我們更多的信息,這個答案只是一個假設。 – vikingosegundo

+0

我在自己的應用程序中追蹤了內存泄漏,只發現UITableViewCells上唯一剩下的保留來自UITableView,並且即使在它們從屏幕滾動出來並且不再可見之後,它仍然保留了這些單元。但是,是的,這只是一個假設,這是OP的情況。 – progrmr

-1

嘗試將它設置爲nil即在dealloc中:

self.imageViewName = nil; 
+0

不,它沒有工作。它崩潰與esc_bad_access! – HardCode

+1

好的,那麼是時候分享一些代碼,所以我們知道你在說什麼,因爲它聽起來很直接 –

+1

你不應該在dealloc中引用self。代替self.imageViewName = nil使用[imageViewName release]; imageViewName = nil; – lorean

0

首先,讓我們定義你的意思。當我們談論真正的內存泄漏時,就是在分配了堆的時候,但是代碼中的任何地方都沒有指向它的指針。它確實泄露,丟失,不能重複使用。如果泄漏工具將其識別爲泄漏,那就意味着它是這種泄漏,這不是某些人所說的那樣只是生活在一起而不是某種錯誤的泄漏。

如果您沒有在泄漏工具中看到它,那麼它可能仍然是泄漏,或者可能是另一種類型的內存問題,它們也被稱爲內存泄漏,如廢棄的內存。

無論如何,請讓我們知道是什麼讓您稱之爲泄漏,您需要發佈代碼以獲取更多幫助。

相關問題