我們可以依賴Objective-C中的規則,一個類的指定初始化器總是被調用嗎?或者我們可以說,幾乎總是如此,除了幾個例外?例如,對於UIView
的docs說:在Objective-C中,指定初始化程序總是被調用的規則並不總是被遵守?
initWithFrame:方法
如果以編程方式創建一個視圖對象,這種方法是UIView類的 指定初始化。子類可以重寫 此方法來執行任何自定義初始化,但必須在其實施開始時調用超級 。
如果您使用Interface Builder 來設計您的接口,則當您從後續從nib文件加載視圖 對象時,將不調用此方法。在筆尖 文件對象被重組,然後用自己的的initWithCoder初始化: 方法
或者我們可以說,如果是程序,規則應該始終適用於精心設計的課程,但Interface Builder中有點不同,因爲它可以從非程序化的方式「復活」或構建對象。如果是這樣,當我們進行iOS編程時,他們是否還有其他例外情況?
'awakeFromNib:'在以編程方式創建對象時不會被調用。我建議在'layoutSubviews'中進行初始設置(對於'UIView'子類) – Sven