自動引用計數器 一

2021-08-21 10:38:27 字數 1832 閱讀 6751

自動引用計數器是指記憶體管理中引用採取自動計數的計數。

一.記憶體管理的思考方式

思考方式分為四類:

1.自己生成的物件,自己所持有。

2.非自己生成的物件,自己也能持有。

3.不在需要自己持有的物件時候釋放。

4.非自己持有的物件無法釋放。

生成並持有物件——–>alloc/new/copy/mutablecopy

持有物件————->retain方法

釋放物件————->release方法

廢棄物件————->dealloc方法

·自己生成的物件,自己所持有

使用以下名稱開始的方法名意味著自己生成的物件只有自己持有:alloc,new,copy,mutablecopy

自己生成並持有的物件object-c距離

id obj=[[nsobject alloc]init];

id obj=[nsobject new];

另外使用以下名稱開頭的方法名也意味著自己生成並持有物件。

allocmyobject,newthatobject,copythis,mutablecopyyourobject。

但是對於以下名稱開頭的並不為自己生成並持有。

allocate,newer,copying,mutablecopyed。

·非自己生成的物件,自己也能夠持有

id obj=[nsmutablearray array];//獲得的物件存在,但自己並不持有

/獲得的物件並自己持有/

id obj=[nsmutablearray array];

[obj retain];

·不在需要自己持有的物件時候釋放

id obj=[[nsobject alloc]init];

[obj release];

自己生成而非自己所持有的物件,若用retain方法變為自己為持有者,也可以使用release方法釋放。

id obj=[nsmutablearray array];

[obj retain];

[obj release];//釋放物件,物件不可再被訪問

那麼使用某個方法生成物件,並將物件返還給呼叫方的原始碼如下:

自己生成並不持有的原始碼如下:

autorelease與release區別如下:

release是立馬釋放,autorelease是不立即釋放,是註冊到autoreleasepool中,等經過一段時間poo結束時候才會自動呼叫release方法。

·無法釋放非自己持有的物件

二.alloc/retain/release/dealloc的實現

自動引用計數器 五 strong與weak

首先這裡是一片比較基礎的部落格 我在這裡再補充幾句。物件被廢棄時候會進行一下幾步操作 1 從weak表中獲取廢棄物件的位址為鍵值的記錄。2 將包含在記錄中的所有 weak修飾符變數的位址,賦值為nil。3 從weak表中刪除記錄。4 從引用計數器表中刪除廢棄物件的位址為鍵值的記錄。由上述過程可知,如...

引用計數器 與 記憶體管理

一 引用計數器的基本操作 1.方法的基本使用 1 retain 計數器 1,會返回物件本身 2 release 計數器 1,沒有返回值 3 retaincount 獲取當前的計數器的值 4 dealloc 當乙個person物件被 的時候,就會自動呼叫這個方法 void dealloc 2.概念 1...

自動引用計數

每當你產生乙個物件,arc分配一大塊控制項去儲存這個物件。除此之外,當乙個物件是不在需要,arc 將會收回這個例項物件所佔的空間。如果乙個物件的空間被釋放掉,但是你任然通過物件的引用呼叫方法或者屬性,你的程式將要崩潰。為了不讓物件被釋放掉 arc將會追蹤有多少屬性 常量 變數正在引用這個物件。只要有...