溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

OC中的內存管理retain總結

發布時間:2020-07-19 20:37:54 來源:網絡 閱讀:1103 作者:無名小卒 欄目:開發技術

   在OC中,內存管理采用"引用計數"的機制。這種機制的好處在于:如果有一個對象同時被多個指針指向時,這些指針都對這個對象擁有所有權。如果一個指針放棄所有權時不會將該內存銷毀,以避免出現野指針問題。

   那么這種機制是如何實現的呢?這里需要幾個關鍵字:

1. retain 是引用計數+1

2. copy  復制一個原對象, 引用計數為 1, 原對象釋放

3. assign  直接賦值.

4. dealloc 當引用計數為0 時, 由系統調用, 回收空間

   我們都知道,在定義一個類時,我們需要聲明屬性,系統會根據我們聲明的屬性自動生成setter和getter方法。但系統默認聲明的setter方法是直接賦值的(assign), 這樣我們在將對象賦值給成員變量時,就會出現上面所說的問題。為避免這種問題,方便地管理內存,我們需要在聲明屬性是加上關鍵字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];
}

管理內存是需要牢記黃金法則,凡是用alloc, retain, copy關鍵字時,都要對應使用release或autorelease。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女