启用僵尸会阻止我的应用崩溃

时间:2014-11-29 21:24:14

标签: objective-c macos cocoa memory-management automatic-ref-counting

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

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

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

enter image description here

但这可能只是因为指针指向内存中的那个位置而内存还没有被覆盖。

知道可能导致问题的原因是什么?

修改

_backingTextField是一个强有力的参考,这也很奇怪。在对象本身被释放之前,这不应该被释放。

编辑2

什么是没有价值的是animator代理自动调用此方法。

self.animator.xOffset = xOffset;

编辑3

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

1 个答案:

答案 0 :(得分:0)

我发现了这个问题。

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

无法调试......