Во-первых, перья - это гораздо меньше работы.Если у вас есть огромный блок раннего кода, состоящий из множества «создайте эту метку; установите размер шрифта на 14; поместите его в (12,12; 128x96)», тогда у вас есть хороший кандидат для загрузки с пера.
Два: Для объектов в перо, которое init
вызывается при загрузке кончика, и связанные методы могут быть неочевидными.Я нашел следующие правила:
Объекты классов с прямой поддержкой IB (UIViews, встроенные UIViewControllers) создаются с помощью initWithCoder:
.Это обходит обычный назначенный инициализатор, потому что IB фактически создает экземпляр этого объекта в реальном времени, пока вы редактировали кончик (предположительно, с помощью обычного назначенного инициализатора), а затем сериализует его.Это имеет значение, когда вы подклассифицируете эти классы: только экземпляр базового класса UIKit был создан и сериализован в IB, поэтому ваши инициализаторы полностью обойдены.Однако, см. Ниже.
Объекты, созданные с помощью заполнителей - оранжевый (или синий) куб "NSObject" - создается с обычным init
.Это потому, что IB не может создавать экземпляры только для любого класса;поэтому он сериализует «объект-заполнитель» в перо, которое затем заменяется на свежий init
-объявленный экземпляр нужного класса при загрузке кончика.Однако:
Оба вышеперечисленных вызывают awakeFromNib
. Таким образом, вы можете выполнить любую специальную настройку, которая вам нравится, если этот объект всегда будет создан изпероС осторожностью вы можете создать общий метод настройки и вызывать его как из awakeFromNib
, так и из ваших не init
инициализаторов, чтобы иметь возможность использовать класс из пера или без него.
Конечно, ни один из вышеперечисленных не относится к «владельцу файла», который был создан, как вы хотите, и существует до загрузки пера.
Три: В UIViewController
,loadView
выполняет фактическую загрузку файла пера (и обеспечивает одно пустое представление, если файла пера нет.) Переопределите, если вы хотите создать свои представления другим способом.Если вы хотите изменить или добавить к тому, что было загружено из пера, viewDidLoad
- лучшее место для этого: есть обстоятельства, когда loadView
никогда не вызывается, но viewDidLoad
все еще есть.(например, когда VC и его представление создаются в одном и том же перо; есть причина, по которой Apple рекомендует против этого, хотя иногда это удобно.) viewDidLoad
также хорошо сбалансирован с viewDidUnload
, поэтому материал, выделенный в viewDidLoad
можно и нужно выпустить в viewDidUnload
.
Перья заслуживают изучения.Как только вы освоитесь, вы полюбите их;есть причина, по которой они с 1989 года.