Objective-C語言使用的是"訊息結構"而非"函式呼叫"
"訊息結構"和"函式呼叫"之間的區別
-
"訊息結構"的語言: 運行時由運行環境決定所應執行的代碼
-
"函式呼叫"的語言: 由編譯器決定
//Messaging (Objective-C) 訊息結構
Object *obj = [Object new];
[obj performWith:parameter1 and:parameter2];
//Function calling (C++)方法呼叫
Object *obj = new Object;
obj->perform(parameter1,parameter2);
記憶體模型:Objective-C語言中的指標是用來指示物件的
-
Objective-C為C語言添加了面向物件特性,是其"超集",C語言的所有功能在撰寫OC代碼時依然適用!
-
Objective-C語言中的指標是用來指示物件的,
-
物件所占記憶體總是分配在"堆空間"(heap space)中,不能在堆疊(stack)中分配物件,
NSString *someString = @"the string";
/**說明:
上面代碼是宣告一個名為someString的變數,型別是NSString *,看就是說,此變數為指向NSString的指標,
Objective-C物件所占記憶體分配在“堆空間”中,絕對不會分配在“堆疊”上,
所以someString變數指向分配在堆里的某塊記憶體,其中含有一個NSString物件,
*/
//再創建一個變數,令其指向同一地址,那么并不拷貝物件,只是這兩個變數會同時指向此物件
NSString *anotherString = someString;
/**說明:
兩個NSString *型別變數指向一個NSString實體,
當前“堆疊幀”里分配兩塊記憶體,每塊記憶體大小都能容下一枚指標,(在32位架構計算機是4位元組,64位架構計算機是8位元組),這兩塊記憶體里的值都一樣,都是NSString實體的記憶體地址,
*/

-
分配在堆中的記憶體必須直接管理,Objective-C是通過"參考計數"這一記憶體管理架構來管理,而分配在堆疊上用于保存變數的記憶體則會在其堆疊幀彈出時自動清理,
-
Objective-C定義的不含*的變數通常是非物件型別的變數(基本資料型別和結構體),他們使用的是"堆疊空間"(stack space)
struct CGRect {
CGPoint origin;
CGSize size;
};
typedef struct CGRect CGRect;
要點
-
Objective-C為C語言添加了面向物件特性,是其超集,
-
Objective-C使用動態系結的訊息結構,也就是說,在運行時才會檢查物件型別,
-
接受一條訊息之后,究竟應執行何種代碼,由運行期環境而非編譯器來決定,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/11415.html
標籤:iOS
上一篇:Flutter 的基本控制元件
下一篇:deinit 沒執行
