OC 簡單的記憶體管理方法

2021-06-28 21:12:10 字數 918 閱讀 8734



1.alloc

、new

或copy

來建立乙個物件,那麼你必須呼叫release

或autorelease

。換句話說,不是你建立的,就不用你去釋放。(誰建立誰釋放,物件所有權負責釋放)

2.如果你在乙個class

的某個方法中alloc

乙個成員物件,且沒有呼叫autorelease或及時releaase

, 那麼你需要在這個類的dealloc

方法中呼叫release

;如果呼叫 了autorelease

,那麼在dealloc

方法中什麼 都不需要做。

3.盡量用sel.*** = ***來對物件進行賦值操作,在物件不用的時候也可以用self.*** = nil來對其釋放

注意下面這個例子裡,你無需保留新建的數值,因為陣列會幫你保留。

nsmutablearray *array;

int i;

for (i = 0; i < 10; i++) 

nsnumber *n = [[nsnumber alloc] initwithint: i];

[array addobject: n];

[n release];

本例中,在for迴圈裡你需要給n傳送乙個-release訊息,因為你需要始終在-alloc之後將n的數量保持為1。這麼做的原因是當其通過-addobject:方法被新增至陣列中時,陣列已經將其儲存起來。即使你釋放了n,但是這個數字由於已經儲存在陣列裡,所以不會被釋放。

為了了解這些,假設你自己就是編寫陣列類的人。你不希望接收的物件未經你同意就消失,所以你會在物件傳遞進來時,對其傳送乙個-retain訊息。如果他們被刪除,你同時也要對應地傳送乙個-release訊息。在你自己-dealloc時,你也要給你收到的所有物件傳送乙個-release。

手動記憶體管理方法

1 為了實現乙個高併發的分布式web大資料查詢引擎,需要避免在程式設計時頻繁的執行malloc和free時所引起的巨大開銷,我們調研了linux核心中的記憶體管理演算法 buddy系統和slab分配器 以及glibc malloc的實現中對於堆的管理。以下記為演算法1和2.演算法1 和 演算法2 執...

uC OS II系統中的記憶體管理方法

uc os ii的記憶體管理由自定義的分割槽 陣列 來完成,根據需要進行初始化 建立 獲得 釋放 注意它只是做管理,並沒有提供真實使用的位址,使用的位址是通過osmemcreate由外部提供的。而了解這種機制,在我們平時的程式開發有多記憶體的應用場合,可是採用這種思想進行裝置。1 記憶體的初始化 之...

封裝函式時候,函式內分配記憶體簡單管理方法。

網上常見人這樣封裝 這種 缺點就是要手工處理new處理的記憶體空間。讀取乙個檔案的內容到緩衝區,下面的 僅是例子,不寫錯誤處理。int loadtobuffer const char filename,byte buffer 處理的辦法,有下面幾種。1.用智慧型指標代替。2.用vector代替。in...