當(dāng)對象沒有擁有者時,指針變量的內(nèi)存就該被釋放噪伊。故 ARC 就是為了解決什么時候釋放內(nèi)存的問題囚戚。對應(yīng)的就是引用計數(shù)為零時。
ARC:
- strong:指針變量指向?qū)ο蠛螅鄳?yīng)的對象多一個擁有者膝舅,引用計數(shù)加一嗡载。默認(rèn)值,但通常會寫出來仍稀。
- weak :指針變量指向?qū)ο蠛笸莨觯鄳?yīng)的對象擁有者個數(shù)不變,引用計數(shù)不變技潘。相對 strong遥巴,避免循環(huán)引用問題。
- copy :屬性指向的對象有可能修改的子類享幽, 如 NSMutableString/NSMutbaleArray铲掐,這時使用 copy,引用計數(shù)為一值桩。
- unsafe_unretained:與 weak 類似摆霉,但不會指針自動設(shè)置為 nil,適合非對象屬性奔坟,不需要做內(nèi)存管理携栋,如 int,也是其默認(rèn)值可不寫咳秉。
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