2009-10-12 113 views
0

我有一個UITableView其中每個單元格是一個圖像。一次只能看到一個單元格。 圖像按需加載。用戶滾動到單元格並加載其圖像。UITableView與圖像不釋放資源

氏是我的cellForRowAtIndexPath方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
static NSString *MyIdentifier = @"MyIdentifier"; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 

if (cell == nil) { 
    // this is being compiled for OS 2.0, this is why I am using initWithFrame… it is working fine on 3.0 iPhone. 
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectMake(0, 0, 480, 320) reuseIdentifier:MyIdentifier] autorelease]; 
} 

UIImage *imagemX; 
UIImageView *myView; 

imagemX = [[[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle] 
pathForResource:[NSString stringWithFormat: @"img%d", (indexPath.row+1)] ofType:@"jpg"]] autorelease]; 

myView = [[[UIImageView alloc]initWithImage:imagemX] autorelease]; 

[cell addSubview: myView]; 

return cell; 
} 

這段代碼的問題是,內存使用總是隨着我滾動經過表,即使我回到前面顯示的圖像。滾動一下後,應用程序崩潰,可能由於過度使用內存而跳板。

我錯過了什麼嗎?如何強制圖像在不可見時釋放其資源?

+0

爲什麼這個社區wiki? – 2009-10-12 17:05:39

回答

4

您每次請求單元格時都會向單元格添加子視圖,但是您永遠不會刪除它們。您需要先刪除舊的子視圖。如你的代碼所示,每次單元重新顯示時,它都會獲得另一個UIImageView。

個人而言,我建議使用UIImageView作爲屬性創建一個UITableViewCell子類,然後調用[cell setImageView:]。如果這不起作用,那麼確保在添加新的子視圖之前刪除舊的子視圖。

+0

謝謝!!!!而已! – SpaceDog 2009-10-12 17:33:34

0

不知道這個問題的確切原因,但有沒有一種方法,你需要實現當單元格超出範圍將被觸發?在這裏,也許你可以發佈子視圖/圖像/等?