object c中 new和alloc區別

2021-09-02 15:13:19 字數 775 閱讀 3963

在object-c基礎教程這本書裡老是可以看見類似下面這種**,我這小菜鳥就納悶了,啥區別啊,看上去都一樣麼。網上找了找,找到一些說法,這裡先摘出來。

classname* object = [classname new];

orclassname* object = [[classname alloc] init];

背景說明,new是較為老式的寫法,後來發現只有乙個new不好使,才引入了alloc和init這種寫法,保留new一是向後相容,二是很多時候是一種更簡單的寫法。其實是一樣的,new在內部呼叫的alloc和init.

源**:

+ 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

matlab 中all和any函式

all函式 檢 測矩陣中是否全為非零元素,如果是,則返回1,否則,返回0。any函式 檢測矩陣中是否有非零元素,如果有,則返回1,否則,返回0。用法和all一樣 語法 b all a b all a,dim 複製 b all a 如果a是乙個向量,如果所有的元素都是非零的,則返回1,如果有乙個元素為...

matlab中all和any用法

all函式 檢測矩陣中是否全為非零元素 any函式 檢測矩陣中是否有非零元素,如果有,則返回1,否則,返回0。用法和all一樣 語法 b all a b all a,dim 複製 b all a 如果a是乙個向量,如果所有的元素都是非零的,則返回1,如果有乙個元素為零,則返回0。如果a是乙個矩陣,則...

makefile中的all和 PHONY的作用

請編寫乙個makefile同時編譯 鏈結下面兩個程式 main1.c include int main void main2.c include int main void 分析 這裡需要生成兩個可執行檔案main1和main2 兩個目標 由於makefile只能有乙個目標,所以可以構造乙個沒有規則...