黑馬程式設計師 引用計數器

2021-09-30 11:55:48 字數 1628 閱讀 1035



int main()

// a, b, p全部銷毀,但是[person alloc]還在

return 0;

}2.物件的基本結構

* 每個oc物件都有自己的引用計數器,是乙個整數(4個位元組),表示「物件被引用的次數」,

即有多少人正在使用這個oc物件

*  每個oc物件內部專門有4個位元組的儲存空間來儲存引用計數器。

3.引用計數器的作用

* 當使用alloc、new或者copy建立乙個新物件時,新物件的引用計數器預設就是1.

* 當乙個物件的引用計數器值為0時,物件占用的記憶體就會被系統**,換句話說,如果物件

的計數器不為0,那麼在整個程式執行過程,它占用的記憶體就不可能被**,除非整個程式

已經退出。

4.引用計數器的操作

* 給物件傳送一條retain訊息,可以使引用計數器+1(retain方法返回物件本身)

* 給物件傳送一條release訊息,可以使引用計數器值-1

* 可以給物件傳送retaincount訊息獲得當前的引用計數器值.

5.物件的銷毀

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

* 當乙個物件被銷毀時,系統會自動向物件傳送一條dealloc訊息

* 一般會重寫dealloc方法,在這裡釋放相關資源,dealloc就像物件的遺言

* 一旦重寫了dealloc方法,就必須呼叫[super dealloc], 並且放在最後面呼叫

* 不要直接呼叫dealloc方法

* 一旦物件被**了,它占用的記憶體就不再可用,堅持使用會導致程式崩潰(野指標報錯)

**示例: (引用計數器的基本操作)

(不要勾選: use automatic reference counting

/*

* 1.retain, release方法的基本使用

* * * retain:計數器+1; 會返回物件本身

* * * release:計數器-1; 沒有返回值

* * * retaincount:獲取當前的計數器

* * * dealloc:

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

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

* * 2.概念

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

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

* * 空指標nil: 沒有直線任何東西的指標(儲存的東西是nil, null, 0),給空指標傳送訊息不會報錯。

* * 3.retain方法會返回物件本身

*/#import @inte***ce person : nsobject

@property int age;

@end

@implementation person

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

- (void)dealloc

@end

int main()

自動引用計數器 一

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

引用計數器 與 記憶體管理

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

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

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