测试代码:
// 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;