OC中爲什麼要使用alloc/init而很少使用new


在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:。


如果您覺得寫的不錯給個贊吧,畢竟原創 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章