在后台线程上渲染UIVIew到图像的安全方法?

时间:2011-06-14 19:29:55

标签: multithreading ios uiview

我正在创建小磁贴图像以存储在磁盘上并显示给用户。以下是我目前执行此操作的过程:

  1. 创建一个代表我想在屏幕上显示的UI的viewcontroller
  2. 从viewcontroller获取视图并从中呈现图像
  3. 将其保存到磁盘并稍后在屏幕上显示
  4. 当我尝试访问viewcontroller的视图时,我崩溃了。当我尝试在线研究时,我在后台创建视图是否安全时遇到了相互矛盾的结果。我正在读UIGraphicsGetCurrentContext调用应该是线程安全的,但也许不能在后台线程上访问UIView?我正在为iOS 4及更高版本编写应用程序。这是我正在使用的代码(tile是viewcontroller):

    CGSize size = CGSizeMake(20.0f, 30.0f);
    UIGraphicsBeginImageContext(size);
    [tile.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();           
    UIGraphicsEndImageContext();
    

    尝试访问磁贴上的.view属性时发生崩溃(EXC_BAD_ACCESS)。重点是在后台渲染视图以防止锁定UI,因为有很多要处理的切片。

    有安全的方法吗?

1 个答案:

答案 0 :(得分:2)

我从未尝试过你所描述的内容,我不喜欢成为坏消息的承载者,而是取自Apple's documentation

  

注意:在大多数情况下,UIKit类   应该只用于   应用程序的主要线程。这是   对于派生的类尤其如此   来自UIResponder或涉及   操纵应用程序的用户   以任何方式接口。

当然,他们很方便地说“大部分时间”,这样就留下了一些摆动的空间。