服务器:

     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 类进行进程间通信的任何建议

最佳答案

NSMachPort 的委托(delegate)是一个弱属性。没有特别的理由相信它在内部是一个弱归零属性。可以肯定的是,您的 MachPortMEssageHandler 实例几乎立即被释放。服务器端口对象是否有指向它的悬空指针,这是一个悬而未决的问题。由于您遇到了崩溃,我怀疑确实如此。您可以在启用 Zombies 的情况下运行以验证这一点。

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

关于cocoa - 通过 NSMachport 在进程之间发送消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35071527/

10-12 14:49