NSKVODeallocate在崩溃日志中

时间:2017-06-21 18:28:06

标签: ios objective-c crash key-value-observing weak-references

来自我的应用程序用户的崩溃日志显示了崩溃堆栈,如下所示。我很难解释这里发生了什么,尤其是那里的NSKVODeallocate。我知道NSKVODeallocate引发异常的崩溃,这通常是由在取消分配类之前尚未删除的KVO观察者引起的。

但情况并非如此:NSKVODeallocate在CBPeripheral上调用dealloc,最终导致崩溃。

这是否意味着CBPeripheral在我的BLE_Device类上有一个KVO观察者?这是否意味着BLE_Device在CBPeripheral类上有一个KVO观察者?它与KVO有什么关系 - 我在网上的某处读到这是弱指针的实现方式。但是BLE_Device肯定没有指向CBPeripheral的弱指针。它确实有一个指向CBPeripheral的强指针(currentDevice),但我希望直接从[BLE_Device .cxx_destruct]解除分配。

这是堆栈跟踪:Stack trace

BLE_Device dealloc,如果相关:

- (void) dealloc
{
    currentDevice.delegate = nil;
    peripheralTableView.delegate = nil;
    selector.delegate = nil;
    CM.delegate = nil;
    if (currentDevice != nil) {
        [CM cancelPeripheralConnection:currentDevice];
    }
    if (CM.state == CBCentralManagerStatePoweredOn) {
        [CM stopScan];
    }
}

0 个答案:

没有答案