2

我正在编写一个 iPhone 应用程序,它允许您在一个视图中浏览图像,并在另一个视图中创建它们。

创建图像的视图将使用以下代码将图像写入文档文件夹(当点击按钮关闭视图时):

[UIImagePNGRepresentation(image) writeToFile:path atomically:YES];

浏览器视图将使用以下方式加载图像:

UIImage *image = [UIImage imageWithContentsOfFile:path];

现在这非常有效,十分之九。十分之一的图像在我加载之前没有完全写入,所以它的下半部分将是黑色的。一切最终都会被写入 - 如果我在浏览器中重新加载图像,则会显示完整的图像。我认为这些东西在一个线程中总是一致的。

我可以做些什么来防止这种行为吗?

现在我正在考虑将新创建的图像传回浏览器,但这似乎是一种黑客行为,因为浏览器也会显示您之前创建的所有图像。

4

2 回答 2

2

如果您确定图像正在使用 保存在主(UI)线程上writeToFile:atomically:,然后图像也在主线程上加载,那么看起来该方法存在问题,维护其合同以完成操作通话返回的时间。iOS 有时确实存在错误,也许你发现了一个。

但是,我还要注意,我看到出现类似问题的一种可能方式是,当假设离开一个视图以显示另一个视图时调用 , 等viewWillAppear的顺序。viewDidDisappear所以,我还要确保图像没有以这些方法之一保存。

既然你说这个问题显示了一个可见的图像,我猜这不是这种情况,但我会向其他有类似操作顺序问题的人发出警告。

于 2012-06-21T10:42:13.450 回答
1

对于未及时完成 UI 的进程的标准解决方案是将其拆分为一个新线程。也许您应该创建一个单独的线程来保存图像,然后通过委托方法通知 UI 以更新自身。

于 2012-06-21T08:46:48.207 回答