對(duì)于loadView和ViewDidLoad 之前的項(xiàng)目都會(huì)用到,但是initWithNibName/awakeFromNib/initWithCoder放在一起饱须,還真是讓我頭疼域醇,下面就寫一下記錄一下自己的學(xué)習(xí)心得,如果有不對(duì)的地方冤寿,請(qǐng)大牛們指出歹苦,小弟不勝感激。督怜。。
首先區(qū)別一下程序化初始viewController狠角,半程序初始化與IB初始化的區(qū)別 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1. 代碼初始化:完全沒有Xib之類的文件号杠,通過(guò)純代碼實(shí)現(xiàn)加載 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.半代碼化:設(shè)計(jì)Xib,然后在程序中用代碼調(diào)用Xib來(lái)進(jìn)行初始化 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3.完全XIB化,設(shè)計(jì)xib之類丰歌,然后加入到其他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è)類在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è)類的awakeFrormNib被調(diào)用的時(shí)候铝噩,那么這個(gè)類的viewDidLoad就不會(huì)被調(diào)用衡蚂, ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5. initWithCode:是一個(gè)類半代碼化實(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)用