It depends on what the instance variables are actually doing. General rule is that the code running by a background thread should not trigger any UI updates such as view.addSubview(..)
or view.setNeedsLayout
etc, then it is safe to play around with a view controller using a background thread.
Another example would be navigation controllers. For instance, once a view controller was pushed onto a navigation stack, even updating viewController.title
can be dangerous so you should make sure viewController.myProperty = true
doesn't trigger any UI updates. Personally, I would do the following assignments in the main thread to feel safe:
dispatch_async(dispatch_get_main_queue(), {
viewController.title = "My Title"
viewController.myProperty = true
...
})
Long story short, you can initialize new UIView or UIViewController (or any UIResponder) in a background thread however, you should be changing any of its properties triggering UI updates within main thread. So create in background but update in main thread.
MyViewController(nibName: nil, bundle: nil)
doesn't trigger any UI updates?viewController.myProperty = true
has no side effects. It's just a simple property. – Gassing