提问人:Duck 提问时间:10/19/2023 更新时间:10/20/2023 访问量:65
为什么 Apple 会创建一个单例结构并将其传递给环境?
Why Apple create a singleton struct and pass it to the environment?
问:
使用 Core Data 创建 App 时,Xcode 会创建一个名为 PersistenceController 的结构,该结构是单例。
struct PersistenceController {
static let shared = PersistenceController()
static var preview: PersistenceController = {
let result = PersistenceController(inMemory: true)
let viewContext = result.container.viewContext
...
然后,当应用启动时,它们创建单一实例并将其传递给.environment()
@main
struct MyApp: App {
let persistenceController = PersistenceController.shared
var body: some Scene {
WindowGroup {
ContentView()
.environment(\.managedObjectContext, persistenceController.container.viewContext)
}
}
}
如果将 did 传递给环境,则 why did 被创建为单例。环境是否没有足够的容量来将单例保留在内存中?而且,使用共享选项来访问单例,而不需要将其传递给环境,难道不是很容易访问吗?PersistenceController
答:
2赞
lorem ipsum
10/19/2023
#1
如果你不想,你不必注射它,但有不明显的用途
@Environment(\.managedObjectContext) var managedObjectContext
如
@FetchRequest
如果你愿意,你可以省略,这取决于你的代码库,你会得到崩溃,说它丢失了。
Apple 使用单例是因为它可以防止存储被多次加载。
评论
0赞
Duck
10/19/2023
谢谢。我忘记了@FetchRequest......如果它被注入到环境中,然后在必要时从环境中调用它,它是否会多次加载?
0赞
lorem ipsum
10/19/2023
@Duck,如果你有static let
0赞
Duck
10/19/2023
明白了。再次感谢。
1赞
malhal
10/20/2023
#2
这样,你就可以在预览环境中使用预览单例,而无需更改视图代码。
评论
0赞
Duck
10/20/2023
啊,好抓!
上一个:如何在单例中正确连接()线程
评论