我在文档中找不到有关对象生命周期管理的任何提示。
在 XPC 服务中,我是否必须保持对 的强引用NSXPCListener,或者resume调用是否有效地处理了这个问题?
我使用 Swift 和连接创建对象从文件中获取大部分内容main.swift:
// main.swift
if let dependencies = Dependencies().setUp() {
// Actually run the service code (and never return)
NSRunLoop.currentRunLoop().run()
}
Run Code Online (Sandbox Code Playgroud)
我有预感,该dependencies对象(NSXPCListener在设置期间创建)应该保留对侦听器对象的强引用。但resume据说该方法的工作方式类似于操作队列。
相反,客户是否需要留在身边NSXPCConnection?
在 XPC 服务中,在传入连接时,设置是否exportedObject在连接期间保留该对象,还是我必须自己保留对它的强引用?
因此:当多个连接进入时,我应该维护一个exportedObjects 列表吗?
在服务客户端中,我应该获取remoteObjectProxy一次并保留它,还是应该为每次调用重新获取一个代理对象?
我的特殊 XPC 服务是一个始终运行的 launchd 进程,而不是一次性的事情,并且客户端应用程序本身也可能在后台运行几个小时。我担心将代理对象保留到后台服务以进行可能长时间运行的通信是否安全。
如果后台服务崩溃,launchd 会重新启动它们。现在,如果我的服务是“按需启动”服务,那么对代理对象的消息调用是否会在必要时发出重新启动,获取代理对象会这样做,还是仅重新连接才能实现这一点?
谢谢你帮我解决这个问题!