gpt4 book ai didi

objective-c - 启用僵尸可以阻止我的应用程序崩溃

转载 作者:行者123 更新时间:2023-12-03 17:21:08 25 4
gpt4 key购买 nike

我的应用程序在这一行崩溃了:

- (void)setXOffset:(CGFloat)xOffset {
_xOffset = xOffset;

_backingTextField.frame = (CGRect) {
.origin.x = - round(xOffset * 2.f) / 2.f,
.origin.y = NSMinY(_backingTextField.frame), // <-- This is it
.size = _backingTextField.frame.size,
};

[self _reloadMask];
}

我收到 EXC_BAD_ACCESS ,这意味着实例 _backingTextField 已被释放。我尝试启用僵尸对象,但是当我这样做时,我的应用程序不再崩溃。我没有收到任何日志,什么也没有。我也无法使用 Instruments 进行重现。

另一件事是该对象似乎仍在内存中

enter image description here

但这可能只是因为指针指向内存中的该位置,并且内存尚未被覆盖。

知道是什么原因导致了这个问题吗?

编辑

同样奇怪的是 _backingTextField 是一个强引用。在对象本身被释放之前,它不应该被释放。

编辑2

毫无值(value)的是这个方法是由animator代理自动调用的。

self.animator.xOffset = xOffset;

编辑3

我只是尝试将 _backingTextField 设置为弱引用,但这也没有帮助。

最佳答案

我发现了这个问题。

我不小心重写了 NSView 类别中的 dealloc 方法。这导致 NSView 的 subview 无法正确释放,并引入了其他奇怪的副作用。

无法调试...

关于objective-c - 启用僵尸可以阻止我的应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27207294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com