我需要使用NSLock吗?

时间:2011-11-22 23:24:21

标签: objective-c ios multithreading locks

我有一个iOS类,它在一个单独的线程中进行一些计算,而主线程显示一个允许用户取消计算的警报。计算线程使用几个可从主线程和计算线程访问的实例变量。计算线程只读取这些变量,并且主线程在计算线程存在时不会写入或读取这些变量。

我的问题是,我需要锁定这些变量吗?

3 个答案:

答案 0 :(得分:3)

只要只有一个线程访问它们,不,你不需要锁定它们。尝试这样做可能是一种好习惯,如果你想从主线程中访问它们,那么现在这样做会很有用。

答案 1 :(得分:2)

不,你不。如果变量一次由多个线程写入和读取,则只需要锁定变量。

答案 2 :(得分:0)

同意Kevin的意见,如果您需要访问它们,您应该计划未来的更改。

仅供参考,我不会使用警报,因为它会阻止主视图。我建议使用活动指示器视图以及允许他们取消的额外按钮。

您可以检查每个常规输入控件(按钮,分段控件等),以确保应用程序“未处理”以接受输入。

- (IBAction)someOtherButtonPressed:(id)sender {
  if( processingFlag == NO ) {
    // allow handling of input
  }
  else {
    // alert or other message indicating the app is processing
  }
}