Y
Y
YellowCataclysm2016-11-05 19:25:16
Objective-C
YellowCataclysm, 2016-11-05 19:25:16

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

2 answer(s)
I
Igor Cherny, 2016-11-05
@YellowCataclysm

Не считается. Создание контроллера не такая уж затратная операция, а данные, которые ему необходимы, Вы конечно можете хранить. В противном случае есть опасность утечек. В вызывающем классе (или в NavigationController) есть системная ссылка на представленный контроллер, которая обнуляется конечно при удалении его с экрана.

M
ManWithBear, 2016-11-05
@ManWithBear

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)

As a result, there is no point in keeping any link to the controller.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question