我的应用程序在此行崩溃:
- (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
的子视图无法正确释放,并引入了其他奇怪的副作用。
不可能调试...