2011-11-04 34 views
0

我有某種用戶輸入會導致一次顯示4個圖像。這些圖像是異步在線下載的。我的ViewController有一個委託方法,這將顯示圖像的準備如下時:顯示多個ImageViews iPad

- (void)imageDidLoad:(UIImage *)image { 

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(xOffset, yOffset, 192, 192)]; 
    imageView.backgroundColor = [UIColor whiteColor]; 
    imageView.image = image; 

    [self.view addSubview:imageView]; 
    xOffset = xOffset + 192; 

    if (count != 0 && count % 4 == 0) { 
     yOffset += 192; 
     xOffset = 0; 
    } 

    count++; 
} 

我要實現下一個按鈕,每個請求將一次顯示4張圖像。在我的imageDidLoad中,當第二張圖像被加載並準備好顯示時,前一張圖像會導致內存泄漏。

這是什麼替代方法?我應該只是autorelease UIImageViews?還有什麼我能做的(比autorelease更好)?

謝謝,

+0

比自動釋放唯一的更好的辦法是釋放,肯定?你爲什麼不現在這樣做? – Luke

回答

0

而不是創建新的UIImageView每一個圖像被加載的時間,我想使控制器的4種的UIImageViews性質。然後,一旦下載圖片,我就會修改相應UIImageView的圖像屬性。你會像平常一樣在 - (void)dealloc中釋放屬性。

+0

是的,但在這種情況下,我一次只能顯示4張圖像。我想一次顯示4個,但是當我點擊'下一個'時,會顯示另一個4,並保留舊的。那樣,我不能只是讓4重複使用 - 對嗎? – darksky

0

你應該在你將imageView作爲子視圖添加後釋放你的imageView。這將解決你的泄漏。

0

這將解決你的問題,但你真的應該重新使用imageView,而不是每次創建一個新的。

- (void)imageDidLoad:(UIImage *)image { 

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(xOffset, yOffset, 192, 192)]; 
imageView.backgroundColor = [UIColor whiteColor]; 
imageView.image = image; 
[self.view addSubview:imageView]; 
[imageView release]; 

xOffset = xOffset + 192; 

if (count != 0 && count % 4 == 0) { 
    yOffset += 192; 
    xOffset = 0; 
} 

count++; 

}

+0

哦,所以我的觀點會保留圖像視圖?另外,我將如何重用圖像視圖? – darksky