對于loadView和ViewDidLoad 之前的項目都會用到,但是initWithNibName/awakeFromNib/initWithCoder放在一起,還真是讓我頭疼,下面就寫一下記錄一下自己的學習心得,如果有不對的地方,請大牛們指出,小弟不勝感激。。。
首先區別一下程序化初始viewController,半程序初始化與IB初始化的區別 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1. 代碼初始化:完全沒有Xib之類的文件,通過純代碼實現加載 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.半代碼化:設計Xib,然后在程序中用代碼調用Xib來進行初始化 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3.完全XIB化,設計xib之類,然后加入到其他XIB里面,
下邊就是各個方法的使用: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1. viewDidLoad:這個方法在上面的三種方式下都會調用,而且是加載完View后調用 ? ? ? ? ? ? ? ? ? ? 2. loadView: 代碼初始化程序時設計view用,半代碼化時和完全IB化初始時也會調用,但會在initWithNibName之后,ViewDidLoad之前 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3.initWithNibName 半代碼化初始時使用,完全IB初始化的時候不調用,UIViewConrtoller代碼初始化時會通過init調用,而且調用在[super init]中 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?4.awakeFromNib :這個方法是一個類在IB中被實例化時被調用的,不過很多人都推薦使用viewDidlaod而不要使用awakeFromNib,應該是因為awakerFromNib 只會當從NIb文件中unarchive的時候才會被調用一次,而viewDidLoad會被調用多次,實際應用中會發現當一個類的awakeFrormNib被調用的時候,那么這個類的viewDidLoad就不會被調用, ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5. initWithCode:是一個類半代碼化實例時被調用的,比如:通過IB創建一個Controller的nib文件,然后在Xcode中,通過initWIithNIbName來實例化這個Controller,那么這個controller的initWithCode會被調用