Objective c 能够在后台线程中使用UIKit类
我进行了实验,能够在后台线程中实例化Objective c 能够在后台线程中使用UIKit类,objective-c,multithreading,uikit,Objective C,Multithreading,Uikit,我进行了实验,能够在后台线程中实例化UIKit类(UIImageView)。我见过应用程序在后台线程上使用UIKit执行操作时崩溃。在幕后,在非主线程上处理UIKit时,是什么导致异常?例如,如果我完全不处理视图层次结构,它安全吗?它不安全。有一些记录在案的任务可以安全地调用后台任务,例如,将字符串绘制到图像中,访问UIFont,按下/弹出/使用当前图形上下文。但是,大多数情况下,该行为未定义或记录为不安全行为。您永远不知道这些类在后台使用的是什么共享资源(或者在将来的版本中使用)。例如,他们可
UIKit
类(UIImageView
)。我见过应用程序在后台线程上使用UIKit
执行操作时崩溃。在幕后,在非主线程上处理UIKit
时,是什么导致异常?例如,如果我完全不处理视图层次结构,它安全吗?它不安全。有一些记录在案的任务可以安全地调用后台任务,例如,将字符串绘制到图像中,访问UIFont
,按下/弹出/使用当前图形上下文。但是,大多数情况下,该行为未定义或记录为不安全行为。您永远不知道这些类在后台使用的是什么共享资源(或者在将来的版本中使用)。例如,他们可以使用共享内存池
根据我的经验,在大多数情况下,如果未将ui视图
添加到任何ui窗口
中,您不会看到问题,但它仍然不安全
例如,我认为从NIB加载东西(使用
UINib
)只能从主线程完成。。。任何视图都可以从NIB加载子视图。这是不安全的。有一些记录在案的任务可以安全地调用后台任务,例如,将字符串绘制到图像中,访问UIFont
,按下/弹出/使用当前图形上下文。但是,大多数情况下,该行为未定义或记录为不安全行为。您永远不知道这些类在后台使用的是什么共享资源(或者在将来的版本中使用)。例如,他们可以使用共享内存池
根据我的经验,在大多数情况下,如果未将ui视图
添加到任何ui窗口
中,您不会看到问题,但它仍然不安全
例如,我认为从NIB加载东西(使用UINib
)只能从主线程完成。。。任何视图都可以从NIB加载子视图