新聞中心
在OC中,內(nèi)存管理采用"引用計數(shù)"的機制。這種機制的好處在于:如果有一個對象同時被多個指針指向時,這些指針都對這個對象擁有所有權。如果一個指針放棄所有權時不會將該內(nèi)存銷毀,以避免出現(xiàn)野指針問題。
那么這種機制是如何實現(xiàn)的呢?這里需要幾個關鍵字:
1. retain 是引用計數(shù)+1
2. copy 復制一個原對象, 引用計數(shù)為 1, 原對象釋放
3. assign 直接賦值.
4. dealloc 當引用計數(shù)為0 時, 由系統(tǒng)調(diào)用, 回收空間
我們都知道,在定義一個類時,我們需要聲明屬性,系統(tǒng)會根據(jù)我們聲明的屬性自動生成setter和getter方法。但系統(tǒng)默認聲明的setter方法是直接賦值的(assign), 這樣我們在將對象賦值給成員變量時,就會出現(xiàn)上面所說的問題。為避免這種問題,方便地管理內(nèi)存,我們需要在聲明屬性是加上關鍵字retain。這樣,我們再將對象賦值給成員變量時,會使其retaincount+1。
@interface Monitor : NSObject {//顯示器類 NSInteger _size;//尺寸 NSString *_type;//屏幕的類型 float _price;//價錢 } @property(nonatomic, retain) NSString *type; @end @implementation Monitor - (void)setType:(NSString *)type { if (_type != type) { [_type release]; _type = [type retain]; } } @end
比如,在type屬性聲明時加上 retain,它的setter方法如上。
如果聲明時加了retain屬性,釋放時dealloc方法需要重寫,代碼如下:
- (void)dealloc { [_type release]; [super dealloc]; }
管理內(nèi)存是需要牢記黃金法則,凡是用alloc, retain, copy關鍵字時,都要對應使用release或autorelease。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
當前標題:OC中的內(nèi)存管理retain總結-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://fisionsoft.com.cn/article/idgcc.html