在程式語言中,記憶體就相當與一張白紙,這張白紙是一個有限的空間,而這些空間會用來記憶資料,就像是大腦一樣。現今的電腦普遍是使用 范紐曼型架構[註 1],而這樣的架構下有所謂的記憶體管理問題。
在程式設計中,有所謂的記憶體管理,最常見到的記憶體架構是使用 Heap 與 Stack。關於這個主題並不會講解,詳閱 Stack based memory allocation - wiki 與 Memory management: Heap - wiki。
值得注意的是,Stack 與 Heap 的記憶體管理有相對的差異,下面翻譯來自 GeeksforGeeks - stack vs heap memory allocation
| PARAMETER | STACK | HEAP | 
|---|---|---|
| 概述 | 記憶體取用區段是連續的 | 記憶體取用區段是不連續連續的(隨機) | 
| 創建與回收 | 由編譯器自動操作 | 由編撰者手動操作 | 
| 資源消耗 | 少 | 多 | 
| 實作的難度 | 較難 | 較易 | 
| 資料取用速度 | 較快 | 較慢 | 
| 已知問題 | 記憶體容易不足 | 記憶體使用方式零散 | 
| 參考區域性 [註 2] | 優化 | 尚可 | 
| 記憶體彈性 | 固定 | 必要時可重整 | 
| 資料的分佈架構 | 線型 | 階層型 | 
在 C 語言中我們可以使用 malloc 向系統要求記憶體空間。
// C
#include <stdlib.h>
typedef struct Person {
    int age;
    char gender;
} Person;
Person* PersonMake(int age, char gender) {
    Person* person = malloc(sizeof(Person));
    if (!person) return NULL;
    person->age = age;
    person->gender = gender;
    return person;
}
malloc 參數使用 sizeof 的語法,建立一個記憶體區塊,要注意的是,這個操作有可能失敗,細節請參考 Should I check if malloc() was successful?
Objective 在 NSObject 的封裝後,使用 [ObjectClass alloc] 來使用,這部分會在後續的 Objective-C 物件編寫討論。
malloc 需要引入那個 headerstruct 的 value type,所以 Objective-C 有 Value type 嗎?