我意识到单身人士不是首选,但是每个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()
}
答案 0 :(得分:1)
我发现,如果您使用锚定更新查询,则应该意识到HealthStore被阻塞,直到updateHandler函数返回。因此,您无法从updateHandler使用HealthStore单例。
您可以通过使用concurreny解决此问题:在操作队列上对操作进行排队,然后在开始处理操作之前从updateHandler返回。
或者您可以创建第二个HealthStore实例,并从updateHandler内部使用它。我必须说我做了一些实验才能知道它是可行的,但是在现实生活中我并没有使用这种方案。所以我不知道对性能的影响。
关于您的第二个问题:应用程序和应用程序扩展名在不同的进程中运行。无法在两者之间共享一个实例。每个人都必须拥有自己的HKHealthStore实例。