在iOS上,如何在新线程中检查UISwitch';ViewController中的s值';你的观点是什么?
在iOS上,如果有一个查看应用程序,并且使用以下方法创建了一个新线程:在iOS上,如何在新线程中检查UISwitch';ViewController中的s值';你的观点是什么?,ios,multithreading,Ios,Multithreading,在iOS上,如果有一个查看应用程序,并且使用以下方法创建了一个新线程: [NSThread detachNewThreadSelector:@selector(consumeData:) toTarget:self.consumer withObject:self.queue]; 其中,消费者是一个消费者对象,将在方法消费者数据中处理数据,队列是一个队列对象,它是消费者处理数据的来源 但是,如果线程需要检查主视图上的开关是否设置为on或off,该怎么办?也就是说,切换使用者对象是应
[NSThread detachNewThreadSelector:@selector(consumeData:)
toTarget:self.consumer withObject:self.queue];
其中,消费者
是一个消费者
对象,将在方法消费者数据
中处理数据,队列
是一个队列
对象,它是消费者处理数据的来源
但是,如果线程需要检查主视图上的开关是否设置为on或off,该怎么办?也就是说,切换
使用者
对象是应该执行工作还是暂停。是否应改为使用withObject:self
,以便将整个ViewController引用传递给线程,然后线程将使用ViewController.view.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,或者有更好的或替代的方法吗?绝对没有。任何与UI相关的内容都不能从另一个线程中触及。这根本不安全。如果另一个线程需要知道开关的当前值,那么它需要在请求之前回调主线程。绝对不行。任何与UI相关的内容都不能从另一个线程中触及。这根本不安全。如果另一个线程需要知道开关的当前值,那么它需要在请求之前回调主线程。如果创建子类,可以将状态存储在对象中的变量中,然后从任何线程访问这些变量;当然,前提是这些操作不调用UIKit定义的方法。如果创建子类,可以将状态存储在对象的变量中,然后从任何线程访问这些变量;当然,前提是这些操作不调用UIKit定义的方法。如何回调主线程?所以ViewController
应该实现isconsumerswitch
方法吗?有很多选项。在你的情况下,我建议永远不要回拨到主线程。相反,可以在使用者上放置原子bool
属性,并让线程检查该属性。然后,当你的开关被翻转时,只需切换属性。所以这就像让主控设置东西一样。。。我正在查看performSelectorOnMainThread
,但是似乎没有办法返回任何值(需要返回BOOL
值)dispatch\u sync(dispatch\u get\u main\u queue(),…)
加上\u block
变量可以返回值,但这可能是个坏主意。只需使用正确的原子共享布尔值即可。如何回调主线程?所以ViewController
应该实现isconsumerswitch
方法吗?有很多选项。在你的情况下,我建议永远不要回拨到主线程。相反,可以在使用者上放置原子bool
属性,并让线程检查该属性。然后,当你的开关被翻转时,只需切换属性。所以这就像让主控设置东西一样。。。我正在查看performSelectorOnMainThread
,但是似乎没有办法返回任何值(需要返回BOOL
值)dispatch\u sync(dispatch\u get\u main\u queue(),…)
加上\u block
变量可以返回值,但这可能是个坏主意。只需使用正确的原子共享布尔值即可。