Сервер:передачи сообщений между процессом над NSMachport
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];
}
Сервер сохраняет сбой с EXC_BAD_ACCESS в [runloop Run] линии. Любые рекомендации по правильному использованию класса NSMachport для межпроцессного взаимодействия
Спасибо, Кен, это сработало, следующая задача - узнать, как вернуть исходное сообщение, отправленное с клиента на делегат сервера, все, что у меня есть (void *), любые идеи? –
'void *' является указателем на структуру сообщений Mach, начиная с 'msg_header_t'. Если вы еще не знакомы с сообщениями Mach, вы, вероятно, не должны использовать 'NSMachPort'. Просто используйте 'NSPort',' NSPortDelegate', его метод '-handlePortMessage:' и 'NSPortMessage'. Еще лучше, если вам не нужен обмен сообщениями низкого уровня, используйте [Распределенные объекты] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DistrObjects/DistrObjects.html). –
закончил использование распределенных объектов. Но XPC с обработчиками недействительности выглядит правильно для IPC. –