服务器:
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类进行进程间通信的建议
答案 0 :(得分:4)
NSMachPort
的代表属弱势属性。在内部,没有特别的理由相信它是一个零弱的财产。确定您的MachPortMEssageHandler
实例几乎立即被释放。这是一个悬而未决的问题,服务器端口对象是否有一个悬挂指针。因为你遇到了崩溃,我怀疑它确实如此。您可以使用Zombies运行来验证。
您需要在持续时间内存储对委托对象的强引用。