對(duì)于loadView和ViewDidLoad 之前的項(xiàng)目都會(huì)用到茵典,但是initWithNibName/awakeFromNib/initWithCoder放在一起算吩,還真是讓我頭疼,下面就寫(xiě)一下記錄一下自己的學(xué)習(xí)心得茄螃,如果有不對(duì)的地方,請(qǐng)大牛們指出,小弟不勝感激绰寞。。铣口。
首先區(qū)別一下程序化初始viewController滤钱,半程序初始化與IB初始化的區(qū)別 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1. 代碼初始化:完全沒(méi)有Xib之類(lèi)的文件,通過(guò)純代碼實(shí)現(xiàn)加載 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.半代碼化:設(shè)計(jì)Xib,然后在程序中用代碼調(diào)用Xib來(lái)進(jìn)行初始化 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3.完全XIB化脑题,設(shè)計(jì)xib之類(lèi)件缸,然后加入到其他XIB里面,
下邊就是各個(gè)方法的使用: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1. viewDidLoad:這個(gè)方法在上面的三種方式下都會(huì)調(diào)用叔遂,而且是加載完View后調(diào)用 ? ? ? ? ? ? ? ? ? ? 2. loadView: 代碼初始化程序時(shí)設(shè)計(jì)view用他炊,半代碼化時(shí)和完全I(xiàn)B化初始時(shí)也會(huì)調(diào)用,但會(huì)在initWithNibName之后已艰,ViewDidLoad之前 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3.initWithNibName 半代碼化初始時(shí)使用痊末,完全I(xiàn)B初始化的時(shí)候不調(diào)用,UIViewConrtoller代碼初始化時(shí)會(huì)通過(guò)init調(diào)用哩掺,而且調(diào)用在[super init]中 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?4.awakeFromNib :這個(gè)方法是一個(gè)類(lèi)在IB中被實(shí)例化時(shí)被調(diào)用的凿叠,不過(guò)很多人都推薦使用viewDidlaod而不要使用awakeFromNib,應(yīng)該是因?yàn)閍wakerFromNib 只會(huì)當(dāng)從NIb文件中unarchive的時(shí)候才會(huì)被調(diào)用一次疮丛,而viewDidLoad會(huì)被調(diào)用多次幔嫂,實(shí)際應(yīng)用中會(huì)發(fā)現(xiàn)當(dāng)一個(gè)類(lèi)的awakeFrormNib被調(diào)用的時(shí)候辆它,那么這個(gè)類(lèi)的viewDidLoad就不會(huì)被調(diào)用, ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5. initWithCode:是一個(gè)類(lèi)半代碼化實(shí)例時(shí)被調(diào)用的履恩,比如:通過(guò)IB創(chuàng)建一個(gè)Controller的nib文件锰茉,然后在Xcode中,通過(guò)initWIithNIbName來(lái)實(shí)例化這個(gè)Controller切心,那么這個(gè)controller的initWithCode會(huì)被調(diào)用