我已经阅读了NSXPC *文档,该文档建议尽可能使售卖服务成为无状态。这是一个好主意,至少对于我读过的文档和示例,因为服务和调用应用程序将对方视为单例,并且一次只运行一个服务实例。这意味着这些方法基本上是非成员函数(使用C ++术语)。
为什么我想绕过这个?我想将网络代码放入XPC中。由于XPC将使用GUI应用程序,它将具有多个窗口,我需要支持多个同时连接。这对单身人士不起作用,至少是直接的。
网络API是基于C的,主状态类型是指向自定义struct
的指针。那么我们为什么不做类似的事情呢?
NSUUID
或其他内容。 (在进程中传递指针将是一个坏主意。)NSDictionary
和API C指针之间创建std::map
(或NSUUID
或其他)映射。UUID
并将其转换为C指针以使用网络API。旁白:由于令牌是随机的,如果XPC服务崩溃,主应用程序将有一个在重新启动XPC后无用的令牌。也许我应该使用URL(这将重新启动所有信息)。但是如果两个连接碰巧发生在同一个服务器上,那么我们就会遇到潜在的冲突也许我可以将这些想法与作为URL / UUID对的令牌结合起来。 (UUID值将从服务返回到主应用程序提供。)
这是实现状态完全XPC的好方法吗?
答案 0 :(得分:0)
您可能希望向服务接口添加一个方法,该方法使用长期代理对象进行回复。您可以通过调用-[NSXPCInterface setInterface:forSelector:argumentIndex:ofReply:]
来安排此操作,并为最后一个参数传递YES。详情请见: