dealloc在dismissviewcontroller之后被称为延迟

时间:2015-09-15 03:59:48

标签: ios objective-c grand-central-dispatch nsnotificationcenter

我使用AViewController来呈现BViewController。

我在B上使用AVPlayer,并使用一些dispatch_after 3秒钟。和一些NSNotification,观察员。

当我点击我的自定义关闭按钮时,在我的dismiss方法中,我删除了NSNotification,Observer,甚至在它已经导航到AViewController时调用[NSObject cancelPreviousPerformRequestsWithTarget:self];,我看到网络状态仍然在iPhone的系统状态栏上。在2 - 5秒后(取决于),我可以看到从日志中调用了dealloc

- (void)dismissThisViewController {
    NSLog(@"dismiss");
    [self deinitTimer];
    [NSObject cancelPreviousPerformRequestsWithTarget:self];
    if (self.videoPlaying) {
        [self pause];
    }
    [self.rsPlayer removeTimeObserver:self.timeObserver];
    [self.rsPlayer.currentItem removeObserver:self forKeyPath:@"status"];
    [self.rsPlayer.currentItem removeObserver:self forKeyPath:@"loadedTimeRanges"];
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}
//dealloc
- (void)dealloc {
    NSLog("dealloc");
}

我该怎么做才能做到对?导航到AViewController后立即销毁BViewController。因为我可以在从BViewController直接导航到A之后呈现BViewController。

更新

通过设置断点到dealloc()方法,我得到了这个。 enter image description here

我确实有NSTimer,但我已经发布了它。

- (void)deinitTimer {
    if (self.timer) {
        [self.timer invalidate];
        self.timer = nil;
    }
}

新发现:我有MBProgressHUD,当这显示时,我解雇,它将延迟几秒钟dealloc。

这种情况该怎么办?

0 个答案:

没有答案