当对象没有拥有者时,指针变量的内存就该被释放。故 ARC 就是为了解决什么时候释放内存的问题。对应的就是引用计数为零时。
ARC:
- strong:指针变量指向对象后,相应的对象多一个拥有者,引用计数加一。默认值,但通常会写出来。
- weak :指针变量指向对象后,相应的对象拥有者个数不变,引用计数不变。相对 strong,避免循环引用问题。
- copy :属性指向的对象有可能修改的子类, 如 NSMutableString/NSMutbaleArray,这时使用 copy,引用计数为一。
- unsafe_unretained:与 weak 类似,但不会指针自动设置为 nil,适合非对象属性,不需要做内存管理,如 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:使用基本数据类型,如 int,float,与 unsafe_unretained 类似
- retain:非 ARC 版本 strong
网友评论