我意识到单例并不是最受欢迎的,不过在使用HealthKit时,每个苹果文档都有“每个应用程序只需要一个HealthKit商店,这些都是长期存在的对象。创建一次存储,并保留一个参考资料供以后使用。”
在这里使用单例以使每个应用程序会话保持一个HKHealthStore (与在不同类中实例化多个HKHealthStores或试图传递同一个实例)相比有什么缺点吗?
第二,iPhone应用程序和手表扩展程序都需要一个单独的Singleton类吗?或者两者都可以使用单一的Singleton类?
import Foundation
import HealthKit
class HealthStoreSingleton {
class var sharedInstance: HealthStoreSingleton {
struct Singleton {
static let instance = HealthStoreSingleton()
}
return Singleton.instance
}
let healthStore = HKHealthStore()
}发布于 2019-02-07 10:57:21
我发现,如果您使用的是锚定更新查询,那么您应该意识到,在HealthStore函数返回之前,您的updateHandler会被阻塞。因此,您不能从您的HealthStore中使用updateHandler单例。
您可以通过对操作队列使用concurreny: queue操作来解决这一问题,并在开始处理操作之前从updateHandler返回。
或者您可以创建第二个HealthStore实例,并在updateHandler内部使用该实例。我必须说,我做了一些实验,以了解它的工作,但我没有使用这个方案在现实生活的情况下。所以我不知道表演的影响。
关于第二个问题:应用程序和应用程序扩展在不同的进程中运行。没有办法在两者之间共享一个实例。每个人都必须有自己的HKHealthStore实例。
https://stackoverflow.com/questions/49503344
复制相似问题