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等 結構,列舉等不用去關心記...