Answer the question
In order to leave comments, you need to log in
How to properly instantiate and store ViewControllers in iOS?
Инстанцирование ViewController-ов из storyboard осуществляется методом instantiateViewControllerWithIdentifier, после чего созданный VC инициализируют и "показывают".
Считается ли нормальной практикой хранить полученную strong-ссылку на VC в вызывающем классе, чтобы создаваемый VC не деаллоцировался сразу после его закрытия и его можно было отображать по необходимости, минуя стадию создания и инициализации? Или же правильным решением будет отпускать ссылку и при каждом обращении инстанцировать VC заново?
Answer the question
In order to leave comments, you need to log in
Не считается. Создание контроллера не такая уж затратная операция, а данные, которые ему необходимы, Вы конечно можете хранить. В противном случае есть опасность утечек. В вызывающем классе (или в NavigationController) есть системная ссылка на представленный контроллер, которая обнуляется конечно при удалении его с экрана.
In a more ideal world, you will have your own xib for each controller, in which layout will actually take place. This approach perfectly solves the problem of storyboard merges.
As a result, we refuse string constants (viewControllerID). And then the creation of a new controller will look like this:
This approach in turn pushes us towards Dependency Injection.
As a result, we get a convenient:
But if there are more than 2-3 dependencies, then it is more convenient to display them in a separate settings-class / structure:
let settings = MyViewController.Settings(<here init>)
let vc = MyViewController(with: settings)
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question