記憶體管理的範圍:
任何繼承了
nsobject
的物件,對其他基本資料型別(
int、
char
、float
、double
、struct
、enum
等)無效
物件的基本結構
1.每個
oc物件都有自己的引用計數器,是乙個整數,表示
「物件被引用的次數
」,即有多少人正在使用這個
oc物件
2.每個
oc物件內部專門有
4個位元組的儲存空間來儲存引用計數器
引用計數器的作用
1.當使用
aloo
、new
或者copy
建立乙個新物件時,新物件的引用計數器預設就是12.
當乙個物件的引用計數器值為
0時,物件占用的記憶體就會被系統**。換句話說,如果物件的計數器不為
0,那麼在整個程式執行過程中,它占用的記憶體就不可能被**,除非整個程式已經退出
引用計數器的操作
1.給物件傳送一條
retian
訊息,可以使引用計數器值+1(
retian
方法返回物件本身)
2.給物件傳送一條
release
訊息,可以使引用計數器值
-13.
可以給物件傳送
retaincount
訊息獲得當前的引用計數器值
物件的銷毀
1.當乙個物件的引用計數器值為
0時,那麼它將被銷毀,其占用的記憶體被系統**
2.當乙個物件被銷毀時,系統會自動向物件傳送一條
dealloc
訊息3.
一般會重寫
dealloc
方法,在這裡釋放相關資源,
dealloc
就像物件的遺言
4.一旦重寫了
dealloc
方法,就必須呼叫【
supper dealloc
】,並且放在最後面呼叫
5.不要直接呼叫
dealloc
方法一旦物件被**了,它占用的記憶體就不再可用,堅持使用會導致程式崩潰(野指標錯誤)
記憶體管理原則(1
).只要還有人在用某個物件,那麼這個物件就不會被**(2
).只要你想用這個物件,就讓物件的計數器+1(
3).當你不再使用這個物件時,就讓物件的計數器
-1誰建立,誰
release
(1).
如果你通過
alloc
、new
或[mutable]copy
來建立乙個物件,那麼你必須呼叫
release
或autorelease
(2).
換句話說,不是你建立的,就不用你去【
autorelease】誰
retain
,誰release
只要你呼叫了
retain
,無論這個物件是如何生成的,你都要呼叫
release
【有始有終,有加就有減】
【曾經讓物件的計數器
+1,就必須在最後讓物件計數器-1】
@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
方法的名稱
概念1.殭屍物件:所占用的記憶體已經被**的物件,殭屍物件不能再使用
2.野指標:指向殭屍物件(不可用記憶體)的指標,給野指標傳送訊息會報錯(exc_bad_access )
3.空指標:沒有指向任何東西的指標(儲存的東西是nil、null、0),給野指標傳送訊息不會報錯
Object c記憶體管理
記憶體管理 物件的生命週期包括以下幾個時期 物件初始化 物件接收訊息和執行操作 物件被釋放 判斷乙個物件是否結束,用到引用計數器 引用計數器的基本概念 1 每個人物件有乙個整數值,這個整數值與物件本身關聯,稱為引用計數器 2 當某些地方需要使用這個物件時,可以將引用計數器加1,表示使用這個這個物件 ...
Object C 記憶體管理
object c 記憶體管理 一 基本概念 1.iphone系統中的objective c的記憶體管理機制是比較靈活的,即可以拿來像c c 一樣用,也可以加個autoreleasepool讓它公升級為半自動化的記憶體管理語言 2.引用計數是例項物件的記憶體 唯一參考 引用計數 retaincount...
Object C中管理記憶體
object c之中採用一種保留記錄的方式記錄我們所建立的所有的物件,並且,當該計數減少為0的時候,object c自動收回分配給乙個物件的記憶體。text text1 text alloc init text text2 text alloc init 每乙個物件的計數都為1,我們可以通過reta...