Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 iBaction是否在主队列上激发?_Ios_User Interface_Grand Central Dispatch_Ibaction - Fatal编程技术网

Ios iBaction是否在主队列上激发?

Ios iBaction是否在主队列上激发?,ios,user-interface,grand-central-dispatch,ibaction,Ios,User Interface,Grand Central Dispatch,Ibaction,我试图找出答案,但有点陷入了这个问题。所有关于UI的指南都说,所有UI内容都应该在GCD主线程上,但并没有人提到iActions的内部实现 那么,iBaction是否在GCD主线程上触发?是的,您可以使用NSLog(@“is main thread?%d”,[NSThread isMainThread])自己测试它您还可以使用调试器和左视图了解代码执行的线程 可以安全地假设,@IBActions仅在主线程上由苹果的幕后代码调用: 重要: 除非另有说明,否则只能从应用程序的主线程或主调度队列使用U

我试图找出答案,但有点陷入了这个问题。所有关于UI的指南都说,所有UI内容都应该在GCD主线程上,但并没有人提到iActions的内部实现


那么,iBaction是否在GCD主线程上触发?

是的,您可以使用NSLog(@“is main thread?%d”,[NSThread isMainThread])自己测试它您还可以使用调试器和左视图了解代码执行的线程

可以安全地假设,
@IBAction
s仅在主线程上由苹果的幕后代码调用:

重要: 除非另有说明,否则只能从应用程序的主线程或主调度队列使用UIKit类。此限制尤其适用于从UIResponder派生的类或涉及以任何方式操纵应用程序用户界面的类

注意:您的代码完全可以在后台线程上调用
@IBAction
的方法。这就是为什么我要做出这种区分


注意:如果您在这里是因为IBOutlet上出现错误,请将IBOutlet设置为强(而不是弱),以避免在某些情况下访问未引用的IBOutlet。

是的,它们在主线程上执行。是的,您可以使用NSLog(@“is main thread?%d”,[NSThread isMainThread])自己测试它;您还可以使用调试器和左视图来了解代码中执行的线程。@Ricardo谢谢,没有想到这么简单的检查=(您能否将此作为答案,以便对其他人有用?Done@htzfun,别忘了在这些情况下,调试器和左视图比使用日志更快。@htzfun,这不是直观的,在谷歌几秒钟后:“顾名思义,主运行循环在应用程序的主线程上执行。此行为可确保用户相关事件按接收顺序连续处理。”(来源:)当然你可以测试它,而且有时会发生,但是文档是否保证它总是发生在主队列上?@BryanBryce,我的回答回应了你的评论。文档并不保证IBAction关键字中的主线程安全。文档中可以找到的IBAction的唯一用途是连接到interface builder。简单地说,无论iAction与否,函数都将在调用该函数的线程上调用。不保证…假设在引擎盖下的主线程上调用标有iAction的func是绝对不安全的。关键字的唯一目的是使函数可连接到interface builder。否则,func将从之前调用函数的线程调用@IBAction。因此,如果Apple发疯,并且从那里调用@IBAction的位置不在主线程上,则您不在主线程上:)您好@Dominik Bucher,您能否提供一个示例,说明您知道从后台线程调用IBAction标记的函数的位置,或者苹果会“发疯”并根据自己的“重要”标记准则在后台线程调用IBAction的原因?