asssign 和weak的区别

asssign 和weak的区别

  • 本质区别
    • __unsafe_unretained的速度 > __weak
objc

@property (nonatomic ,assign) XXXDog *dog:

*__unsafe_unretained _dog;


__unsafe_unretained的特点:
1.不是强引用,不能保证OC对象的命
2.如果引用的OC对象销毁了,指针并不会被自动清空,
依然指向销毁的对象(很容易产生野指针错误:EXC_BAD_ACCESS)

@property(nonatimic,weak)XXXg *dog;//XXXDog *_Nullable __Weak_dog;/

__weak 的特点:
1.不是强引用,不能保住Oc对象的命
2.如果引用的OC对象销毁了,指针会被自动清空(变为nil),
不再指向销毁的对象(永远不会产生野指针错误)
  • 用途
    • assign 一般用在基本数据类型上面,比如int\double等;
    • weak 一般用在代理对象上面,或者用来解决循环强引用的问题

你可能感兴趣的:(asssign 和weak的区别)