兩個方法名字長的很像,所以一定有相似的作用,身上都貼著“一次”的標簽。
區別
init是“-”開頭的方法
initialize是“+”開頭的類方法
init在類實例化(new)的時候就會調用一次:[ClassName new]相當于[[class alloc]init],我們對init應該是很熟悉的,大多數時候我們不使用new來實例化,而是直接定義自己的init方法通過[[ClassName alloc]initWithXXX]這樣來做。
initialize在向類發送消息的時候調用一次:什么是發送消息?實例化一個對象[ClassName new]是發送消息,調用一個類方法[ClassName method]也是向這個類發送消息。
在new的時候,initialize方法會在init之前先調用
只要new一次,init就會調用一次,new多少次,init就調用多少次,但initialize只會調用一次。
如果子類沒有實現initialize的重寫,在子類收到消息的時候,會調用兩次initialize,一次是父類調用的,一次是子類調用的。