【iOS之线程间通讯】html
Cocoa为iOS线程间通讯提供2种方式,1种是performSelector,另1种是Port。函数
先说第1种,performSelector,有如下几种:oop
第2种为NSMachPort方式。NSPort有3个子类,NSSocketPort、NSMessagePort、NSMachPort,但在iOS下只有NSMachPort可用。post
使用的方式为接收线程中注册NSMachPort,在另外的线程中使用此port发送消息,则被注册线程会收到相应消息,而后最终在主线程里调用某个回调函数。url
能够看到,使用NSMachPort的结果为调用了其它线程的1个函数,而这正是performSelector所作的事情,因此,NSMachPort是个鸡肋。线程间通讯应该都经过performSelector来搞定。使用方法以下:spa
....... self.machPort = [NSPort port]; // [NSPort port]默认返回一个NSMachPort,NSMachPort的初始化方法老是返回nil不知道为什么 self.machPort.delegate = self; [[NSRunLoop currentRunLoop] addPort:self.mainPort forMode:NSDefaultRunLoopMode]; // 工做线程的NSRunLoop ....... - (void)trigerMachPort { if (self.machPort) { // 不少参数没查到有什么做用 [self.machPort sendBeforeDate:[NSDate date] msgid:12 components:nil from:self.mainPort reserved:123]; } [self performSelector:@selector(doSomething) onThread:self.thread withObject:nil waitUntilDone:NO]; } - (void)handleMachMessage:(void *)msg { // msg也不知道什么做用 NSLog(@"message:%d", *(int *)msg); }