我在关于对象生命周期管理的文档中找不到任何提示。
在XPC服务中,我是否必须强力引用NSXPCListener
,或resume
来电是否有效处理此问题?
我使用Swift和连接创建对象从main.swift
文件中获取大部分内容:
// main.swift
if let dependencies = Dependencies().setUp() {
// Actually run the service code (and never return)
NSRunLoop.currentRunLoop().run()
}
我预感到dependencies
对象(在设置期间创建NSXPCListener
)应该保持对侦听器对象的强引用。但据说resume
方法就像操作队列一样工作。
相反,客户是否需要来保持NSXPCConnection
?
在XPC服务中,在传入连接时,设置exportedObject
是否在连接期间保留该对象,或者我是否必须自己保持强烈的参考?
因此:当有多个连接进入时,我应该保留exportedObject
的列表吗?
在服务的客户端中,我应该获得remoteObjectProxy
一次并保留它,还是应该为每次呼叫重新获得代理对象?
我的部分XPC服务是一个一直运行的启动过程,而不是一次性的事情,客户端应用程序本身也可能在后台运行几个小时。我担心将代理对象保留在后台服务是否安全可能会导致长时间运行。
如果后台服务崩溃,则说launchd重启它们。现在,如果我的服务是"按需启动"相反,服务代理对象的消息调用会在必要时发出重新启动,会获取代理对象吗,还是只会重新连接实现呢?
感谢您帮助我解决这个问题!