ARC中__weak;__strong;__unsafe_unretained;修饰词

测试代码:

// Human.h代码
@interface Human : NSObject
@property (nonatomic, weak) Cat *pinkCat;
@property (nonatomic, unsafe_unretained) Cat *blackCat;
@end


// ViewController.m

// 声明属性
@property (nonatomic, strong) Human *human;


    Cat *blackCat = [[Cat alloc] init];
    Cat *pinkCat = [[Cat alloc] init];
    
    Human *human = [[Human alloc] init];
    human.blackCat = blackCat;
    human.pinkCat = pinkCat;
    
    self.human = human;

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    NSLog(@"cat___%@" , _human.pinkCat);
    NSLog(@"cat___%@" , _human.blackCat);
}

1、声明为 weak 的指针,指针指向的地址一旦被释放,这些指针都将被赋值为nil。可以有效的防止野指针;

2、声明为 unsafe_unretained 的指针,指针指向的地址一旦被释放,处理不当会出现野指针。在iOS4之前是没有weak的,一般使用该修饰词;

3、strong 修饰的对象,会使对象的引用计数 +1;

原文地址:https://www.cnblogs.com/xiu619544553/p/5643666.html