Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 主线程上需要什么?_Ios_Uikit - Fatal编程技术网

Ios 主线程上需要什么?

Ios 主线程上需要什么?,ios,uikit,Ios,Uikit,我写了一个叫做define的小程序(我经常使用它)。但是,我不确定哪些用户界面方法需要在主线程上调用。那么setNeedsDisplay和setNeedsLayout呢?IOS5.x中需要在主线程上调用的方法的经验法则是什么 这些问题是相关的(一些低质量的问题和答案,以及一些非常具体的案例),但我想要一个全面、单一的好答案: 经验法则:任何更新界面的操作都必须在主线程上。从iOS 4.0开始: 在UIKit中绘制图形上下文现在是线程安全的。具体而言: 用于访问和操作图形上下文的例程现

我写了一个叫做define的小程序(我经常使用它)。但是,我不确定哪些用户界面方法需要在主线程上调用。那么
setNeedsDisplay
setNeedsLayout
呢?IOS5.x中需要在主线程上调用的方法的经验法则是什么

这些问题是相关的(一些低质量的问题和答案,以及一些非常具体的案例),但我想要一个全面、单一的好答案:

经验法则:任何更新界面的操作都必须在主线程上。

从iOS 4.0开始:

  • 在UIKit中绘制图形上下文现在是线程安全的。具体而言:

    • 用于访问和操作图形上下文的例程现在可以正确处理驻留在不同线程上的上下文

    • 字符串和图像绘图现在是线程安全的

    • 在多个线程中使用颜色和字体对象现在是安全的

大卫·邓肯在他的评论中证实了这一点

除此之外,几乎所有关于UIKit的内容都不被认为是线程安全的,因此在这些情况下,您应该确保在主线程上与它进行交互


另一方面,我确实更喜欢链接到的宏,因为我喜欢显式包装需要在主线程上运行的代码

对于iOS 12,如果从后台线程调用setNeedsDisplay,则会得到以下断言:

主线程检查器:在后台线程上调用的UI API:-[UIView setNeedsDisplay]


正如我在回答中指出的,从iOS 4.0开始,UIKit的某些方面都是线程安全的。好极了,一如既往地+1,谢谢Brad Larson。这就是我一直在寻找的答案(我一直无法想象)。您能否评论一下
setNeedsDisplay
setNeedsLayout
,以及您是否可以从另一个线程安全地调整
UILabel
上的字符串?@Yar-我相信
-setNeedsDisplay
是安全的,因为在绘制到上下文中时会受到保护,但我不确定
-setNeedsLayout
。我认为后者可能不安全,因为这不是处理绘图,而是处理视图和图层的定位。我认为UILabel的文本绘图应该是安全的,但我自己还没有测试过。