在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只能有乙個目標,所以可以構造乙個沒有規則...