我知道单的同时使用HealthKit没有赠品首选,但每个苹果的文档“您只需要为每个应用的单一HealthKit店,这些都是长寿的对象。创建店里来,并保持供以后使用的参考。”
是否有任何缺点在这里使用一个单以坚持每个应用会话1个单HKHealthStore(而不是要么实例多个HKHealthStores在不同的班级,或试图绕过同一个实例)?
其次,那会是最好有两个iPhone应用程序和监视扩展独立的单例类?或者可以均使用一台单例类?
import Foundation
import HealthKit
class HealthStoreSingleton {
class var sharedInstance: HealthStoreSingleton {
struct Singleton {
static let instance = HealthStoreSingleton()
}
return Singleton.instance
}
let healthStore = HKHealthStore()
}
我发现,如果你正在使用锚更新查询,那么你应该意识到,你的HealthStore被阻止,直到你updateHandler函数返回。所以你不能从你的updateHandler使用HealthStore单。
您可以通过使用并发解决这个问题:在一个操作队列队列操作,并开始处理操作之前从updateHandler返回。
或者,您可以创建第二个HealthStore实例,使用从updateHandler内。我必须说,我做了一些实验,以了解它的工作原理,但我并没有在现实生活中的情况下使用此方案。所以,我不知道对性能的影响。
关于你提到的第二个问题:应用程序和应用程序扩展名是在不同的进程中运行。有没有办法共享两者之间的一个实例。每个人都有拥有自己HKHealthStore的实例。