1

在 iOS 上,如果有一个单一视图应用程序,并且使用以下命令创建一个新线程:

[NSThread detachNewThreadSelector:@selector(consumeData:) 
     toTarget:self.consumer withObject:self.queue];

其中consumer是一个Consumer对象,它将在方法内部处理数据consumeData,而queue是一个Queue对象,它是消费者处理数据的来源。

但是如果线程需要检查主视图上的 Switch 是设置为 on 还是 off 怎么办?那就是切换Consumer对象是否应该在此刻完成工作或暂停。应该withObject:self改为使用,以便将整个 ViewController 引用传递给线程,然后线程将用于viewController.view.______访问开关的值,并用于viewController.queue访问队列,还是有更好或替代的方法?

4

2 回答 2

1

绝对不。任何与 UI 相关的东西都不能从另一个线程中触及。这根本不安全。如果其他线程需要知道开关的当前值,那么它需要在请求之前回调主线程。

于 2012-08-23T23:30:01.827 回答
0

如果您创建一个子类,您可以将您的状态存储在对象的变量中,然后从任何线程访问这些变量;当然这些操作不调用 UIKit 定义的方法。

于 2012-08-30T12:17:35.207 回答