弱到强引用仍然在查找时崩溃

ekscrypto

我在以下代码中的 managedObject.objectRevision 访问中收到 EXC_BAD_ACCESS 异常:

-(void)increaseObjectRevision {
    __weak LibraryManagedObject* weakSelf = self;
    dispatch_async(dispatch_get_main_queue(), ^{
        LibraryManagedObject* managedObject = weakSelf;
        if(managedObject) {
            managedObject.objectRevision = managedObject.objectRevision + 1;
        }
    });
}

我有点难住,因为这个代码模式似乎是强引用中提到的解决方案块内的弱引用

这是 objectRevision 属性的声明:

@interface LibraryManagedObject : NSObject
@property (readonly, nonatomic) NSUInteger objectRevision;
...
@end

并在 LibraryManagedObject.m 中重新定义为:

@interface LibraryManagedObject()
@property (readwrite, nonatomic, assign) NSUInteger objectRevision;
@end

我在这里缺少什么吗?

注意:我可以使属性原子化,但看到这不是指向 NSNumber 的指针而是值本身,它不应该是 EXC_BAD_ACCESS 异常的原因。

ekscrypto

问题中发布的代码按预期工作。对照weakSelf的值检查异常中上报的内存地址,发现地址不同。

在我们的讨论 ( https://chat.stackoverflow.com/rooms/218530/discussion-between-ol-sen-and-ekscrypto ) 中,很明显 KVO 可能实际上与崩溃有关。其中一个 KVO 观察者在被解除分配之前没有正确地取消注册其观察者。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

弱引用仍然存在

Swift中的强引用和弱引用

强引用,弱引用+镜像:导致泄漏

Swift:保持对弱变量的强引用

iOS块和对自身的强/弱引用

嵌套块中的弱/强引用

尾递归函数仍然在Java中使堆栈崩溃

对包含嵌套强引用和垃圾回收的对象的弱引用

Java /弱引用:弱引用.get()不为null,而不再有强引用保存它

无人认领的工作仍然在退出时停止

在块中使用弱obj时崩溃

静态/动态与强/弱

有人可以解释强引用,软引用,弱引用和幻像引用之间的区别及其用法吗?

当我仍然在页面HTML / CSS上单击时,丢失底部边框颜色

Ajaxify 链接,以便它仍然在点击时访问地址但不会更改页面

购买了两个 MS 托管的并行作业,但构建仍然在 60 分钟时超时

我给传递参数到函数仍然在添加链接列表时仍然给出错误代码缺少参数

Nexus 7在滑动边缘时仍然崩溃?

我设置了INITIAL_CONTEXT_FACTORY,“ org.jboss.naming.remote.client.InitialContextFactory”,但它仍然在Websphere中查找

引用弱引用变量时,是否应将计算的属性指定为“弱”?

rpc.ServerCodec仍然在服务吗?

卸载的Firefox仍然在这里

代码仍然在startActivity()之后运行

Symfony 检查用户是否仍然在线

当我们从 FireStore 检索数据时,tableview.reloaddata() 仍然在 Dispatchqueue.main.sync 之外工作

当std :: lock_guard仍然在作用域内时,使用pthread_create创建线程是否安全?

弱符号和弱引用

使用ARC并定位iOS 4.0时,如何替换弱引用?

强排序和弱排序的实际含义