我在文档中找不到有关对象生命周期管理的任何提示。
在 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
s 列表吗?在服务客户端中,我应该获得
remoteObjectProxy
一次并保留它,还是应该为每次调用重新获得一个代理对象?我的特殊 XPC 服务是一个始终运行的启动进程,而不是一次性的,客户端应用程序本身也可能在后台运行几个小时。我担心将代理对象保留到后台服务以进行潜在的长期通信是否安全。
如果后台服务崩溃,launchd 会重启它们。现在,如果我的服务是“按需启动”服务,那么对代理对象的消息调用是否会在必要时重新启动,获取代理对象会这样做,还是仅重新连接才能实现?
谢谢你帮我解决这个问题!