目标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的对象中传递信息。