维护HKHealthStore对象的最佳方法...... Singleton?

时间:2018-03-27 02:09:18

标签: ios swift health-kit

我意识到单身人士不是首选,但是每个Apple文档在使用HealthKit时“每个应用程序只需要一个HealthKit存储。这些是长期存在的对象。创建存储一次,并保留一个参考供以后使用。 “

在这里使用单例是否有任何缺点,以便每个应用程序会话持久保存1个单独的HKHealthStore(而不是在不同的类中实例化多个HKHealthStore,或尝试传递同一个实例)?

其次,对iPhone应用程序和Watch Extension都有一个单独的Singleton类吗?或者都可以使用单个Singleton类?

import Foundation
import HealthKit

class HealthStoreSingleton {
    class var sharedInstance: HealthStoreSingleton {
        struct Singleton {
            static let instance = HealthStoreSingleton()
        }

        return Singleton.instance
    }

    let healthStore = HKHealthStore()
}

1 个答案:

答案 0 :(得分:1)

我发现,如果您使用锚定更新查询,则应该意识到HealthStore被阻塞,直到updateHandler函数返回。因此,您无法从updateHandler使用HealthStore单例。

您可以通过使用concurreny解决此问题:在操作队列上对操作进行排队,然后在开始处理操作之前从updateHandler返回。

或者您可以创建第二个HealthStore实例,并从updateHandler内部使用它。我必须说我做了一些实验才能知道它是可行的,但是在现实生活中我并没有使用这种方案。所以我不知道对性能的影响。

关于您的第二个问题:应用程序和应用程序扩展名在不同的进程中运行。无法在两者之间共享一个实例。每个人都必须拥有自己的HKHealthStore实例。