ARC下OC对象使用assign和使用weak的区别

2025-03-10 08:07:32
推荐回答(1个)
回答1:

@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的话 在
[objc] view plain copy
_p.book = _b;
[objc] view plain copy
这行代码有很大的几率会报野指针异常,但是也有不报异常的时候
[objc] view plain copy
assign是指针赋值,不对引用计数操作,使用之后如果没有置为nil,可能就会产生野指针;而weak一旦不进行使用后,永远不会使用了,就不会产生野指针