Hello
I am trying to understand how to properly manage ObservableObject's (ObservedObject inside the SwiftUI View) lifecycle which was created in a view controller as a parent of a SwiftUI view. I have read many posts and rewatched these two videos and I am not still 100% sure
https://developer.apple.com/wwdc20/10040
https://developer.apple.com/wwdc22/10072
So my dilemma boils down to whether it is needed to strongly retain the object by the parent view controller or not. In many sources including the videos it was mentioned that SwiftUI does NOT manage the lifecycle of the ObservedObject.
The SwiftUI view and the model (ObservableObject)
final class MyModel: ObservableObject {
// imagine this is somehow updated form somewhere
@Published var message = ""
}
struct MySwiftUIView: View {
@ObservedObject var myModel: MyModel
var body: some View {
Text("message is \(myModel.message)")
}
}
Option 1: View controller retaining the object
class MyViewController: UIViewController {
let myModel: MyModel // strong reference
let hostingController: UIHostingController<MySwiftUIView>
init() {
myModel = MyModel()
let mySwiftUIView = MySwiftUIView(myModel: myModel)
self.hostingController = UIHostingController(rootView: mySwiftUIView)
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Option 2: View controller NOT retaining the object
class MyViewController: UIViewController {
let hostingController: UIHostingController<MySwiftUIView>
init() {
let myModel = MyModel() // local retain for the `init` body
let mySwiftUIView = MySwiftUIView(myModel: myModel)
self.hostingController = UIHostingController(rootView: mySwiftUIView)
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Can i just use Option 2, and not retaining the observable object by the parent view controller or would that cause any issues?
Thank you in advance!
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Several of my colleagues had unfortunately autoupdated to Sequoia and were unable to run Xcode 15 as usual (we found a workaround by executing from inside the package content).
I have instructed the rest of my colleagues from the organization to avoid updating to Sequoia for now.
So my question is, is this intended and will this restriction persist for future versions of Sequoia or can we wait for an update to Sequoia that would "fix" this problem?
Topic:
Developer Tools & Services
SubTopic:
Xcode