Objective-C 屬性的內(nèi)存管理特性

當(dāng)對象沒有擁有者時,指針變量的內(nèi)存就該被釋放。故 ARC 就是為了解決什么時候釋放內(nèi)存的問題。對應(yīng)的就是引用計數(shù)為零時。

ARC:

  • strong:指針變量指向?qū)ο蠛?,相?yīng)的對象多一個擁有者,引用計數(shù)加一。默認值,但通常會寫出來。
  • weak :指針變量指向?qū)ο蠛?,相?yīng)的對象擁有者個數(shù)不變,引用計數(shù)不變。相對 strong,避免循環(huán)引用問題。
  • copy :屬性指向的對象有可能修改的子類, 如 NSMutableString/NSMutbaleArray,這時使用 copy,引用計數(shù)為一。
  • unsafe_unretained:與 weak 類似,但不會指針自動設(shè)置為 nil,適合非對象屬性,不需要做內(nèi)存管理,如 int,也是其默認值可不寫。

ARC 四個特性的典型用法:

//
//  GWItem.h
//  RandomItems
//
//  Created by Will Ge on 7/23/15.
//  Copyright ? 2015 gewill.org. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface GWItem : NSObject


    @property (nonatomic, copy) NSString *itemName;
    @property (nonatomic, copy) NSString *serialNumber;
    @property (nonatomic) int valueInDollars;
    @property (nonatomic, readonly, strong) NSDate *dateCreated;
    
    @property (nonatomic, strong) GWItem *containedItem;
    @property (nonatomic, weak) GWItem *container;


+ (instancetype)randomItem;

// GWItem 類的指定初始化方法
- (instancetype)initWithItemName:(NSString *)name
                  valueInDollars:(int)value
                    serialNumber:(NSString *)sNumber;

- (instancetype)initWithItemName:(NSString *)name;



@end

非 ARC:

  • assign:使用基本數(shù)據(jù)類型,如 int,float,與 unsafe_unretained 類似
  • retain:非 ARC 版本 strong

參考:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容