C 和Objective C的記憶體管理的對比

2021-09-25 18:09:48 字數 702 閱讀 6580

oc中都是使用物件的裸指標,所有物件都是繼承自nsobject,nsobject提供了init release retain維護計數器,自動的計數釋放對應autorelease,但是autorelease是乙個pool,具體什麼時候release是不確定的,如果乙個方法很長即使方法沒有結束,也有可能被release,也就是說autolease和作用域沒有對應關係。但是把乙個autorelease作為返回值傳出來是沒問題的。參考:

之前看過oc的開發文件,其中提到autorelease的具體發生時間是不定的,如果**段不長就可以認為還沒有進行實際的release,可以把物件傳遞或訪問,這就給開發者造成了很多困惑,導致autorelease不能普遍使用,如果**段比較長,就要手動在合適的地方release。這樣就形成了autorelease和release混合使用的情況。本來autorelease是可以作為對應c++智慧型指標的乙個機制來使用的,但是由於上述缺陷,導致autorelease比智慧型指標要弱化了很多。

在c++中使用智慧型指標可以基本解決所有記憶體管理的問題,當然了,有些簡單的場景也沒必要非得用智慧型指標,用std內建容器類就可以了,或者在寫**的時候小心一些就可以了。相比之下,我猜測,oc中的autorelease pool就是為了能夠作為乙個通用的記憶體管理方案提出來的,但是通過上面的分析,感覺autorelease機制是個半吊子,沒有完全解決問題。結果autorelease之後,又搞了個arc,arc是否好用就完全依賴編譯器的好壞了。

Objective C的記憶體管理

記憶體管理,只要掌握這個原則即可 在變數的生命週期裡,如果此物件是alloc,copy,retain之類的產生的,記得要release或者autorelease。保證引用計數加減後為0。現在來比較詳細的說一下吧。首先,對於變數的生命週期,這裡有幾種 1 方法內部 即變數只存在於方法內部,但是如果此變...

objective c的記憶體管理

oc的記憶體管理。在於屬性的定義,property 引數1,引數2 型別 名字 如 property nonatomic,retain uiwindow window 其中引數主要分為三類 讀寫屬性 readwrite readonly setter語意 assign retain copy 原子性...

Objective C 和 C的對比

1.原始檔對比 2.關鍵字對比 3.資料型別對比 4.流程控制語句對比 5.函式 方法 定義和宣告對比 6.物件導向新增特性 7.物件導向新增語法 8.新增異常處理 1.原始檔對比 2.關鍵字對比 注意 因為oc是在c的基礎上拓展而來,所以c的關鍵字都可以在oc中使用。oc新增的關鍵字大部分 注意不...