InitWithNibName UIViewController: причина этого дизайна? - PullRequest
2 голосов
/ 23 января 2012

Я склонен согласиться с анализом Джо Конвея и Аарона Хиллегаса, о чем сегодня сообщил Уле Бегеманн в http://oleb.net/blog/2012/01/initWithNibName-bundle-breaks-encapsulation/

По сути, они утверждают, что имя файла NIB - это деталь реализации соответствующего класса UIViewController, и что дело не в том, чтобы вызывающий класс передавал имя файла NIB в методе init.

Мне было интересно, была ли какая-то особая причина для этого выбора дизайна от создателей AppKit / UIKit, или это просто ошибка - и, в последнем случае, почему это не было исправлено, когда вышел UIKit, которая была бы хорошей возможностью.

Если бы какой-либо старый таймер Objective-C мог обеспечить историческую основу для этого, было бы неплохо лучше понять структуру, которую мы используем каждый день.

Ответы [ 2 ]

2 голосов
/ 24 января 2012

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

Это все еще не объясняет исторические причины оригинального дизайна, но, по крайней мере, они что-то сделали для решения проблемы - и, как это часто бывает с Apple, очень элегантно.

2 голосов
/ 23 января 2012

Я подозреваю, что это было сделано таким образом, чтобы UIViewController мог иметь базовую функциональность в качестве контроллера, не требуя подклассов.Например, если вы просто нажимаете представление «Credits» на контроллере навигации, и у представления нет ничего, кроме статического текста, вы можете избежать создания подкласса UIViewController.Вы можете просто создать UIViewController напрямую и передать ему перо, содержащее ваш статический текст.

В большинстве случаев, конечно, вам понадобится некоторый уровень взаимодействия с представленным контентом, вВ этом случае необходим пользовательский контроллер.Но в теории это не всегда требуется.

...