我有一些用户输入,这将导致一次显示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
吗?还有什么我能做的(比自动释放更好)?
谢谢,
答案 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++;
}