目标C中的进程内通信

时间:2011-05-06 22:43:37

标签: iphone objective-c cocoa-touch ios ipc

我想知道子线程如何与Objective C中的父线程进行通信。我正在从我的主线程中生成一个线程,并希望亲密关于某个动作的主线程并继续。怎么做到这一点?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

  • 如果您在子线程中发布NSNotification,接收方将收到通知并在the same thread下作为发件人执行。苹果文件说,并标记为注释。
  • 线程之间的信息可以通过共享内存来传输,例如:struct,基本类型(int,CGFloat等)。
  • 线程之间的信息可以通过NSThread的threadDictionary属性进行传输。我更喜欢使用它来注册一些状态变量。例如,滚动时,我会设置以下内容。

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

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

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

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

    如果您有时间,可以阅读threading programming guide

答案 2 :(得分:1)

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