iOS之线程间通信

iOS之线程间通信

  Cocoa为iOS线程间通信提供2种方式,1种是performSelector,另1种是Port。

  先说第1种,performSelector,有以下几种:

  

  第2种为NSMachPort方式。NSPort有3个子类,NSSocketPort、NSMessagePort、NSMachPort,但在iOS下只有NSMachPort可用。

     使用的方式为接收线程中注册NSMachPort,在另外的线程中使用此port发送消息,则被注册线程会收到相应消息,然后最终在主线程里调用某个回调函数。

     可以看到,使用NSMachPort的结果为调用了其它线程的1个函数,而这正是performSelector所做的事情,所以,NSMachPort是个鸡肋。线程间通信应该都通过performSelector来搞定。使用方法如下:

    .......
    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);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值