引用計數器 與 記憶體管理

2022-08-30 03:48:08 字數 1597 閱讀 5699

一、引用計數器的基本操作:

1.方法的基本使用

1> retain :計數器+1,會返回物件本身

2> release :計數器-1,沒有返回值

3> retaincount :獲取當前的計數器的值

4> dealloc

// 當乙個person物件被**的時候,就會自動呼叫這個方法

- (void)dealloc

2.概念

1> 殭屍物件 :所占用記憶體已經被**的物件,殭屍物件不能再使用

2> 野指標 :指向殭屍物件(不可用記憶體)的指標,給野指標傳送訊息會報錯(exc_bad_access)

3> 空指標 :沒有指向任何東西的指標(儲存的東西是nil、null、0),給空指標傳送訊息不會報錯

二、多個物件之間的記憶體管理:

1.你想使用(占用)某個物件,就應該讓物件的計數器+1(讓物件做一次retain操作)

2.你不想再使用(占用)某個物件,就應該讓物件的計數器-1(讓物件做一次release)

3.誰retain,誰release

4.誰alloc,誰release

三、set方法的記憶體管理:

記憶體管理**規範:

1.只要呼叫了alloc,必須有release(autorelease)

物件不是通過alloc產生的,就不需要release

2.set方法的**規範

1> 基本資料型別:直接複製

- (void)setage:(int)age

2> oc物件型別

- (void)setcar:(car *)car

}3.dealloc方法的**規範:(不要直接呼叫dealloc) (此方法是系統自動呼叫的。)

1> 一定要[super dealloc],而且放到最後面

2> 對self(當前)所擁有的其他物件做一次release

- (void)dealloc

四、@property引數:

》1.控制set方法的記憶體管理:

retain:release舊值,retain新值(用於oc物件)

assign:直接賦值,不做任何記憶體管理(預設,用於非oc物件型別)

copy:release舊值,copy新值(一般用於nsstring *)

》2.控制需不需生成set方法:

readwrite:同時生成set方法和get方法(預設)

readonly:只會生成get方法

》3.多執行緒管理:

atomic:效能低(預設) (加鎖)

nonatomic:效能高 (不加鎖)

》4.控制set方法和get方法的名稱:

setter:設定set方法的名稱,一定有個冒號:

getter:設定get方法的名稱

五、autorelease:

1.系統自帶的方法中,如果不包含alloc、new、copy,那麼這些方法返回的物件都是已經autorelease過的

[nsstring stringwithformat:....];

[nsdate date];

2.開發中經常寫一些類方法快速建立乙個autorelease的物件

* 建立物件的時候不要直接使用類名,用self

iOS 基本記憶體管理 引用計數器

1.什麼是記憶體管理 系統會發出記憶體警告,這時得 一些不需要再使用的記憶體空間。比如 一些不需要使用的物件 變數等 管理範圍 任何繼承了nsobject的物件需要去管理記憶體,但是對於對其他基本資料型別 int char float double struct enum等 結構,列舉等不用去關心記...

自動引用計數器 一

自動引用計數器是指記憶體管理中引用採取自動計數的計數。一.記憶體管理的思考方式 思考方式分為四類 1.自己生成的物件,自己所持有。2.非自己生成的物件,自己也能持有。3.不在需要自己持有的物件時候釋放。4.非自己持有的物件無法釋放。生成並持有物件 alloc new copy mutablecopy...

記憶體管理之引用計數

在一些開發語言中,記憶體管理使用的是引用計數的方法,比如python objc等。採用引用計數,開發人員不需要管理記憶體,能夠從記憶體管理繁瑣的工作中脫離出來,從而將更多的精力花費在開發程式上。引用計數的原理 python和objc中的每個物件內部都維護著乙個引用計數器,當新建乙個物件,或者有其他物...