Как может viewControllerWithRestorationIdentifierPath: coder: найти существующий экземпляр?

В документах viewControllerWithRestorationIdentifierPath:coder: говорится:

Ваша реализация этого метода должна создавать (или находить) соответствующий объект контроллера представления и вернуть его... Это не всегда необходимо создать новый объект контроллера вида в вашем реализация этого метода. Вы также можете вернуть существующее представление объект контроллера, который был создан другим способом. Например, если контроллер представления уже был загружен из файла раскадровки, вы вернете этот объект, а не создадите новый. [Мой курсив.]

Это всегда казалось мне полным бессмыслицей. Это метод класса! В настоящий момент у нас нет доступа к каким-либо экземплярам, ​​если мы не создадим их. Я был бы признателен, если кто-нибудь сможет объяснить мне, как метод класса может найти или узнать о "контроллере представления, который уже был загружен из файла раскадровки".

РЕДАКТИРОВАТЬ: Чтобы заработать награду, вы должны показать мне фактическое дело из вашего собственного приложения метода класса viewControllerWithRestorationIdentifierPath:coder:, используемого для "возврата существующего объекта контроллера представления, который был создан другое означает."

Ответ 1

Самый распространенный пример этого, о котором я могу думать, - это любой из контроллеров представлений, принадлежащих App Delegate. Это традиционно контроллер панели вкладок или контроллер навигации в традиционных приложениях, но иногда это может быть что-то совершенно обычное, то есть когда эта функциональность может быть полезна.

Так как UIApplication в значительной степени одноэлементный и имеет один делегат, это означает, что ваш делегат приложения имеет глобальное состояние, которое делает его доступным из любого места, в том числе в методах класса с помощью: [[UIApplication sharedApplication] delegate].

Конечно, любой синглтон доступен из любого места и общий шаблон (но мне лично не нравится) заключается в том, чтобы иметь a NavigationManager singleton, который управляет любыми переходами контроллера глобального просмотра, поэтому в этом случае вы сможете получить доступ существующие экземпляры.