需要特定线程

时间:2016-05-31 18:51:17

标签: ios objective-c xcode multithreading grand-central-dispatch

给定一个必须在主线程上执行的方法:

    -(void)methodRequiringMainThread{

     int a=1;

    }

和来电者:

    -(void)callerToMethod{

      if(![NSThread isMainThread]){
        dispatch_sync(dispatch_get_main_queue(), ^{[self methodRequiringMainThread]}); 
      } else {
       [self methodRequiringMainThread];
      }

}

确保在主线程上调用该方法的最佳做法是什么?

  1. 在界面评论中添加注释,并希望所有呼叫者都检查主要内容 线程和必要时发送(如上所述)。
  2. 将私有方法换行 公共方法,它只是检查主线程并调度 必要的私人方法。
  3. 在被调用的方法中插入NSAssert
  4. 我发现问题依赖于#1 +#3,我不喜欢它,因为你无法测试一个很少在另一个线程上结束的来电者。

    我也不喜欢它,因为没有特定的功能可以在方法签名中向调用者透露这个要求 - 它(一个重要的)半秘密。

    我更喜欢使用#2(或者只是在内部包装内容并检查内容),因为无论调用者如何,它都能保证主线程。

    UIKit似乎也没有做任何明确的检查或曝光,这在这一点上很奇怪。看起来应该有一些内置的功能,即使它只是内部的XCode,它通信和/或保证线程。

0 个答案:

没有答案