"消息結構"的語言: 運行時由運行環境決定所應執行的代碼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爲C語言添加了面向對象特性,是其"超集",C語言的全部功能在編寫OC代碼時依然適用!函數
Objective-C語言中的指針是用來指示對象的。spa
對象所佔內存老是分配在"堆空間"(heap space)中,不能在棧(stack)中分配對象。3d
NSString *someString = @"the string"; /**說明: 上面代碼是聲明一個名爲someString的變量,類型是NSString *。看就是說,此變量爲指向NSString的指針。 Objective-C對象所佔內存分配在「堆空間」中,絕對不會分配在「棧」上。 因此someString變量指向分配在堆裏的某塊內存,其中含有一個NSString對象。 */ //再建立一個變量,令其指向同一地址,那麼並不拷貝對象,只是這兩個變量會同時指向此對象 NSString *anotherString = someString; /**說明: 兩個NSString *類型變量指向一個NSString實例。 當前「棧幀」裏分配兩塊內存,每塊內存大小都能容下一枚指針。(在32位架構計算機是4字節,64位架構計算機是8字節)。這兩塊內存裏的值都同樣,都是NSString實例的內存地址。 */
分配在堆中的內存必須直接管理,Objective-C是經過"引用計數"這一內存管理架構來管理,而分配在棧上用於保存變量的內存則會在其棧幀彈出時自動清理。指針
struct CGRect { CGPoint origin; CGSize size; }; typedef struct CGRect CGRect;
Objective-C爲C語言添加了面向對象特性,是其超集。code
Objective-C使用動態綁定的消息結構,也就是說,在運行時纔會檢查對象類型。orm
接受一條消息以後,究竟應執行何種代碼,由運行期環境而非編譯器來決定。對象