显示多个ImageViews iPad

时间:2011-11-04 22:38:43

标签: iphone objective-c ipad asynchronous uiimageview

我有一些用户输入,这将导致一次显示4个图像。图像以异步方式在线下载。我的ViewController有一个委托方法,它将在准备好后显示图像,如下所示:

- (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++;
}

我想实现下一个按钮,每个请求一次会显示四个图像。在我的imageDidLoad中,当第二个图像已加载并准备好显示时,前一个图像将导致内存泄漏。

有什么替代方案?我应该自动发布UIImageViews吗?还有什么我能做的(比自动释放更好)?

谢谢,

3 个答案:

答案 0 :(得分:0)

每次加载图像时,我都不会创建新的UIImageView,而是创建控制器的4个UIImageViews属性。然后,我会在下载图片后修改相应UIImageView的图像属性。你会像往常一样在 - (void)dealloc中释放属性。

答案 1 :(得分:0)

将图像添加为子视图后,应该释放它。这将解决你的泄漏。

答案 2 :(得分: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++;

}