observeValueForKeyPath:发送到解除分配的实例的消息

时间:2016-05-03 18:58:34

标签: ios objective-c automatic-ref-counting nsnotificationcenter

我有一个简单的UIView孩子,我很困惑为什么我收到此错误(导致应用程序崩溃):

[VideoView observeValueForKeyPath:ofObject:change:context:]: message sent to deallocated instance 0x13009b670

以下是VideoView类:

@implementation VideoView

- (id)init {
    self = [super init];
    if (self) {
        [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(stopVideo)
                                             name:UIApplicationDidEnterBackgroundNotification
                                           object:nil];
    }
    return self;
}

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

//.. stopVideo method

@end

我的dealloc是否确保永远不会将通知发送到已解除分配的实例?我怎么能防止这种情况发生?

iOS 9,启用了ARC

1 个答案:

答案 0 :(得分:2)

你正在混淆。该错误不是由NSNotificationCenter通知引起的。代码中的某处使用key-value observing并且在释放对象时不会删除该观察者,这就是发生崩溃的原因。