我使用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。
更新
我确实有NSTimer,但我已经发布了它。
- (void)deinitTimer {
if (self.timer) {
[self.timer invalidate];
self.timer = nil;
}
}
新发现:我有MBProgressHUD,当这显示时,我解雇,它将延迟几秒钟dealloc。
这种情况该怎么办?