4

我在文档中找不到有关对象生命周期管理的任何提示。

  1. 在 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据说该方法像操作队列一样工作。

  2. 相反,客户需要保持NSXPCConnection周围吗?

  3. 在 XPC 服务中,在传入连接时,设置exportedObject是否在连接期间保留该对象,还是我必须自己保留一个强引用?

  4. 因此:当多个连接进来时,我应该维护一个exportedObjects 列表吗?

  5. 在服务客户端中,我应该获得remoteObjectProxy一次并保留它,还是应该为每次调用重新获得一个代理对象?

    我的特殊 XPC 服务是一个始终运行的启动进程,而不是一次性的,客户端应用程序本身也可能在后台运行几个小时。我担心将代理对象保留到后台服务以进行潜在的长期通信是否安全。

    如果后台服务崩溃,launchd 会重启它们。现在,如果我的服务是“按需启动”服务,那么对代理对象的消息调用是否会在必要时重新启动,获取代理对象会这样做,还是仅重新连接才能实现?

谢谢你帮我解决这个问题!

4

0 回答 0