我收到以下错误:
SearchStockCell retain]: message sent to deallocated instance 0x7f9fa1922c00
但我很难追踪这个问题,因为每当我对僵尸进行分析时,它都会在没有任何警告或错误的情况下停止(2-3 秒)。
我正在为这个项目使用 Realm ,数据解析是在后台执行的。不确定此信息是否相关。
还有其他方法可以追踪吗?或者我可以对 tableview 单元格使用 weak 吗?
已更新
class SearchStockCell: SSBaseTableCell {
@IBOutlet var symbolLabel: UILabel!
@IBOutlet var marketLabel: UILabel!
@IBOutlet var priceLabel: UILabel!
var stock: StockInfo? {
willSet{ "About to step to \(newValue)"
if let aStock = newValue {
// add KVO on newValue
aStock.addObserver(self,
forKeyPath: "price",
options: NSKeyValueObservingOptions.New,
context: nil)
aStock.addObserver(self,
forKeyPath: "change",
options: NSKeyValueObservingOptions.New,
context: nil)
}
}
didSet { "Just stepped from \(oldValue)"
if let aStock = oldValue {
// remove KVO on old value
aStock.removeObserver(self, forKeyPath: "price")
}
if let aStock = oldValue {
// remove KVO on old value
aStock.removeObserver(self, forKeyPath: "change")
}
self.configureCell()
}
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if keyPath == "price" {
self.updatePrice()
}
if keyPath == "change" {
self.updateChange()
}
}
.... ... .. .
这是在 SearchStockCell 中发生的代码。 我将启动一个 API 来更新我的可见单元格(它将更新我的 Realm ),稍后将通过 KVO 提示对 SearchStockCell 的更改。请注意,我不能真正重新加载表格,因为我需要保持表格 View 的位置并且其中有数千行数据。
最佳答案
很难从代码中猜测,但我会尽力寻找答案 请找地方
- 已将
SearchStockCell
用作某处的属性,如果是,请检查属性强/弱。存在相互牵制的可能循环。 - 检查您是否在 block 中使用
SearchStockCell
对象,如果是,请尝试将其用作弱对象。还要检查 block 内完成的其他事情。 - 你正在使用 KVO,检查观察者是否在任何时间点内存不足。
我能想到的最有可能的问题是在某个地方你将 SearchStockCell
对象分配/使用为弱/强,因为 ARC 错误地处理了保留计数。
关于ios - [SearchStockCell 保留] : message sent to deallocated instance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35548916/