在OC中,新建一個對象可以有兩種方式[class_name alloc] init]和[class_name new]那麼這兩種有什麼區別呢,哪一個更好呢
下面我們就來探討一下
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
以上是代碼段,結果輸出如下圖
你會發現new方法其實內部調用了init方法,很顯然在調用之前還分配了內存
其實這其中還有一個奧祕,[class_name alloc] init]在alloc的時候調用了allocWithZone分配了內存,而new只是進行了alloc(這裏的alloc是內存分配的意思,不等價於alloc這個方法)。
也就是說[class_name alloc] init] 實際上做了兩步allocWithZone和init,而new是進行了內存分配,然後init;[class_name alloc] init] 分配的內存會和相關聯的對象在內存地址中相靠近,利於內存讀取。另外[class_name alloc] init]還可以自定義init方法比如像本文中的initWithHaha:。
如果您覺得寫的不錯給個贊吧,畢竟原創