通过NSMachport在进程之间发送消息

时间:2016-01-28 20:36:54

标签: cocoa ipc

服务器:

     NSMachPort *serverPort = (NSMachPort *)([[NSMachBootstrapServer sharedInstance] servicePortWithName:@"com.mycomp.checker.myport"]);

    [serverPort setDelegate:[[MachPortMEssageHandler alloc] init]];


    NSRunLoop *runloop = [NSRunLoop currentRunLoop];

    [runloop addPort:serverPort forMode:NSDefaultRunLoopMode];

    [runloop run];

客户端:

    NSString *name = @"com.mycomp.checker.myport";
    NSMachPort *port = (NSMachPort *) [[NSMachBootstrapServer sharedInstance] portForName:name];

    if (port) {

        [port sendBeforeDate:[NSDate date] components:[NSMutableArray array] from:nil reserved:0];
    }

服务器在[runloop run]行中与EXC_BAD_ACCESS一起崩溃。关于正确使用NSMachport类进行进程间通信的建议

1 个答案:

答案 0 :(得分:4)

NSMachPort的代表属弱势属性。在内部,没有特别的理由相信它是一个零弱的财产。确定您的MachPortMEssageHandler实例几乎立即被释放。这是一个悬而未决的问题,服务器端口对象是否有一个悬挂指针。因为你遇到了崩溃,我怀疑它确实如此。您可以使用Zombies运行来验证。

您需要在持续时间内存储对委托对象的强引用。