一、引用計數器的基本操作:
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中的每個物件內部都維護著乙個引用計數器,當新建乙個物件,或者有其他物...