面试总会被问到这个问题,但是自己一直没有真正的测试过。在ARC下使用wek 对象被释放后,指向对象的指针就会变成空指针,后面在调用相关的对象方法不会出现异常
@interface ViewController ()
@property(weak,nonatomic)Persion *p;
@property(weak,nonatomic)BOOK *b;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
_p = [[Persion alloc] init];
_b = [[BOOK alloc]init];
_p.book = _b;
_b.p = _p;
}
如果将weak换成assign的话 在
_p.book = _b;
这行代码有很大的几率会报野指针异常,但是也有不报异常的时候
assign是指针赋值,不对引用计数操作,使用之后如果没有置为nil,可能就会产生野指针;而weak一旦不进行使用后,永远不会使用了,就不会产生野指针