我的应用程序在此行崩溃:

- (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已被释放。我尝试启用僵尸对象,但是当我这样做时,我的应用程序不再崩溃。我没有日志,什么也没有。我也无法使用乐器进行复制。

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



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

任何想法可能是导致问题的原因吗?

编辑

还很奇怪的是_backingTextField是一个强引用。永远不要在释放对象本身之前释放它。

编辑2

毫无价值的是,该方法由animator代理自动调用。

self.animator.xOffset = xOffset;


编辑3

我只是尝试将_backingTextField用作弱引用,甚至没有帮助。

最佳答案

我发现了问题。

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

不可能调试...

10-07 22:16