UILabel()
label1.backgroundColor = .green
label1.textColor = .red
label1.text = "Мой текст"
Прочитал, что () это тоже самое что и .init(), а .init() совпадает с init(frame: .zero).
Вопрос почему в некоторых исходниках пишут не UILabel(), а UILabel(frame: .zero), ведь они одинаковы?
Потому что хотят)
Ну есть же этому логичное обоснование, тем самым на прямую показывают, что не будет верстки фреймами и что будут констреинты или почему?
Ты ищешь смысл там, где его нет)
В Objc процесс инициализации довольно пространный и не дающий никаких связанных с этим гарантий компилятор. Процесс инициализации позволяет завершиться тем, что можно не присвоить никаких значений всем хранимым свойствам и по милости компилятора, он либо занулит их все, либо там будет просто какой-то мусор; В отличии от Swift, в Objc все инициализаторы наследуются; В отличии от того же Swift, в Objc на процесс инициализации не накладывается никаких компайл тайм гарантий. --- Отсюда мы имеем следующее: - NSObject определяет назначенный инициализатор init; Окей - Теперь, если мы отнаследуемся условным классом Foo от NSObject, то получим в наследство инициализатор init. Здесь кроется интересный момент, никто нам не запретит, не переопределять унаследованный init. Это в свою очередь означает, что экземпляр нашего Foo может быть создан через него, но никакие из определяемых нами в Foo возможных хранимых свойств он не проинициализирует и в них в лучшем случае будут нули, а в худшем - мусор. - С UIView`же мы имеем лишь словесную гарантию, что разработчики UIKit обязываются переопределить унаследованный от NSObject init, делая его уже convinience инициализатором, в котором просто вызывается назначенный [self initWithFrame: CGRectZero]. В настоящем, в Objc добавлены некоторые вещи, по типу атрибутов NS_UNAVAILABLE и NS_DESIGNATED_INITIALIZER в каком-то роде помогающем ничем не гарантирующему процессу инициализации в Objc. Иногда и сам Xcode в каких-то случаях может поругаться предупреждением. НО ничто из этого не предотвратит компиляции. --- Поэтому человек, должен - либо знать, что написано выше и получать "моральное право" вызывать что-то вроде UIView()/UILabel() зная все подводные; - либо в какой-то момент ты можешь выстрелить себе в ногу, а пусть это будет даже не связано с UIKit, а скажем при работе с другим Objc кодом или на каком-то условном собесе.
по красоте расписал. единственное, насколько я помню в дебаге неинициализированные свойства обнуляются, а в релизе там мусор
Я вот сижу в задумчивости и пытаюсь понять как ответ связан с вопросом ))
Эмм. Напрямую, что бы у человека отпал вопрос выбора.
Ну ты как минимум в таком случае пропустил кусок «поэтому дорогой товарищ ответ на твой вопрос такой-то»
Предполагается, что человек после прочтения сам сделает выводы
А почему это предполагается-то?
Мне кажется, если человек сам логически придет к выводу, то это намного лучше усядет в памяти. Нежели ему подадут на блюдце все
Обсуждают сегодня