OC 記憶體管理

2021-06-28 13:01:55 字數 1383 閱讀 5514

管理範圍:任何繼承nsobject的物件,對其他的基本資料型別無效。
判斷物件要不要**的唯一依據就是計數器是否為0,若不為0則存在。所以對記憶體的管理就是對計數器的管理

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

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

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

4> dealloc 

* 當乙個物件要被**的時候,就會呼叫

* 一定要呼叫 [super dealloc], 這句呼叫要放在最後面

當乙個物件的引用計數器為0時,那麼它將被銷毀,其占用的記憶體被系統**。

當物件被銷毀時,系統會自動向物件傳送一條dealloc訊息,一般會重寫dealloc方法,在這裡釋放相關的資源,dealloc就像是物件的「臨終遺言」。一旦重寫了dealloc方法就必須呼叫[super dealloc],並且放在**塊的最後呼叫(不能直接呼叫dealloc方法)。

一旦物件被**了,那麼他所佔據的儲存空間就不再可用,堅持使用會導致程式崩潰(野指標錯誤)。

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

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

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

1> 基本資料型別: 直接複製
- (void)setage:(int)age

2> oc物件型別
- (void)setcar:(car *)car

}

1> 一定要 [super dealloc], 而且放到最後面
2> 對 self (當前)所擁有的其他物件 做一次 release
- (void)dealloc

Oc 記憶體管理

1 對你自己擁有的物件負責,你只能釋放你擁有的物件 2 凡是你通過 retain alloc copy等手段獲得了所有者的物件,都必須在你不使用的時候來呼叫release autorelease等手段來釋放對他的所有權 3 在一定的 段內,對同乙個物件所作的copy alloc retain的操作次...

OC記憶體管理

1.記憶體管理原則 如果對乙個物件使用了alloc mutable copy retain,那麼你必須使用相應的release或者autorelease。2.管理範圍 任何繼承了nsobject 的物件,對其他基本資料型別 int char float double struct enum等 無效 ...

OC記憶體管理

計數器 每當物件被建立的時候,物件就會擁有乙個計數器,計數器預設值是1,當計數器的值為0的時候,物件就會被系統收回。方法的基本使用 1.retain 計數器 1,回返回物件本身 2.release 計數器 1,沒有返回值 3.retaincount 返回當前計數器的值 4.dealoc 當乙個物件被...