当前位置: 移动技术网 > 移动技术>移动开发>IOS > iOS---OBJC_ASSOCIATION_ASSIGN可能引起的Crash

iOS---OBJC_ASSOCIATION_ASSIGN可能引起的Crash

2019年10月09日  | 移动技术网移动技术  | 我要评论

//objc_association_assign类似于我们常用的assign,assign策略的特点就是在对象释放以后,不会主动将应用的对象置为nil,这样会有访问僵尸对象导致应用崩溃的风险。为了解决这个问题:我们可以创建一个替身对象,以objc_association_retain_nonatomic 的策略来强引用替身对象,然后在对象中以weak的策略去引用我们真实需要保护的对象。这样就能解决这个可能导致崩溃的问题了。

//结论:将objc_association_assign改为objc_association_retain,这样在本对象有一个强引用,这个被关联的对象也就不会被释放,生命周期也和本对象相同了。我认为既然关联对象传入的都是对象,那么其实绝大多时候用的应该是objc_association_retain,在我们项目中传入的对象很多是nsnumber类型(包装的bool或则int)的时候都是用的objc_association_assign,以前没暴露问题也是误打误撞错进错出。所以除了一些需要破解循环引用的场景,关联对象的内存操作修饰符建议都用objc_association_retain

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网