object c中 new和alloc區別

在object-c基礎教程這本書里老是可以看見類似下面這種代碼,我這小菜鳥就納悶了,啥區別啊,看上去都一樣麼。網上找了找,找到一些說法,這裏先摘出來。
    className* object = [className new];
or
    className* object = [[className alloc] init];
背景說明,new是較爲老式的寫法,後來發現只有一個new不好使,才引入了alloc和init這種寫法,保留new一是向後兼容,二是很多時候是一種更簡單的寫法。其實是一樣的,new在內部調用的alloc和init.

源代碼:



[className new]基本等同於[[className alloc] init]. 區別只在於alloc分配內存的時候使用了zone,這個zone是個什麼東東呢?它是給對象分配內存的時候,把關聯的對象分配到一個相鄰的內存區域內,以便於調用時消耗很少的代價,提升了程序處理速度.
什麼要把alloc 和init 分開?
1. 可以使用多種init方法
2. 顯示調用總比隱式調用要好”
如果確實不需要用其他的init函數,比如initWithString, 只是使用 [Nsobject alloc] init] ,那用new的方法更加方便

 * new doesn't support custom initializers (like initWithString)

 * alloc-init is more explicit than new

===========================================


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