目标C中的进程内通信

我想知道一个子线程如何能够与Objective C中的父线程交谈。我从我的主线程中产生一个线程,并想要关于某个动作的主线程,并继续。 如何做到这一点?

  • 如果您在子线程中发布NSNotification,接收方将收到通知,并在the same thread发送方the same thread下执行。 苹果文件说,并标记为一个说明。
  • 线程之间的信息可以通过一个共享内存来传递,例如:一个struct,原始types(int,CGFloat等)。
  • 线程之间的信息可以通过NSThread的threadDictionary属性来传递。 我更喜欢用这个来注册一些状态variables。 例如,当滚动时,我会设置以下。

     NSMutableDictionary *dictInfo = [NSThread mainThread].threadDictionary; [dictInfo setObject:[NSNumber numberWithbool:YES] forKey:_kThreadPause]; 

    当看到_kThreadPause设置为YES时,工作线程将进入hibernate状态。

     BOOL bPause = [[[NSThread mainThread].threadDictionary objectForKey:_kThreadPause] boolValue]; if (bPause) [NSThread sleepForTimeInterval:0.1]; 

  • 正如DavidNeiss所说,你可以使用NSObject的方法在主线程或子线程上执行select器。

    如果你有时间,你可以阅读线程编程指南 。

通常你有另一个线程在主线程上运行一个select器,并通过一个ivar共享信息。

 -(void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait 

您可以让线程发布主线程正在侦听(观察)的NSNotification,并在NSNotification的对象中传递信息。