Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.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上,如何在新线程中检查UISwitch';ViewController中的s值';你的观点是什么?_Ios_Multithreading - Fatal编程技术网

在iOS上,如何在新线程中检查UISwitch';ViewController中的s值';你的观点是什么?

在iOS上,如何在新线程中检查UISwitch';ViewController中的s值';你的观点是什么?,ios,multithreading,Ios,Multithreading,在iOS上,如果有一个查看应用程序,并且使用以下方法创建了一个新线程: [NSThread detachNewThreadSelector:@selector(consumeData:) toTarget:self.consumer withObject:self.queue]; 其中,消费者是一个消费者对象,将在方法消费者数据中处理数据,队列是一个队列对象,它是消费者处理数据的来源 但是,如果线程需要检查主视图上的开关是否设置为on或off,该怎么办?也就是说,切换使用者对象是应

在iOS上,如果有一个查看应用程序,并且使用以下方法创建了一个新线程:

[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
变量可以返回值,但这可能是个坏主意。只需使用正确的原子共享布尔值即可。