在MyViewController在viewDidLoad中我只有一个电话:dispatch_after
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.isNeedToExecute = YES;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(20 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self doSomeSimpleThings];
});
}
-(void)doSomeSimpleThings {
if (!self.isNeedToExecute) {
return;
}
// do some simple actions
}
- (void)dealloc {
self.isNeedToExecute = NO;
}
后,在代码中,我弹出此视图控制器,所以无需dispatch_after
的dealloc
将肯定被执行。
的问题:
1)将dealloc方法在这种情况下(当我们有dispatch_after
,应该在20秒内被执行)被称为?
2)将这个方法[self doSomeSimpleThings];
执行后dealloc
?
编辑:
我试了一下发布这个问题之前,和dealloc的不叫,并认为这是奇怪的,这就是为什么我在这里问这个问题。
你为什么不尝试,找出?你的问题真的是“如果我运行这个代码,会发生什么?” – borrrden 2014-10-09 06:55:20
我会* *疑实例将作为您引用'dispatch_async()'块内'self'被保留,所以代码会被调用。你需要用不同的方法设置'isNeedToExecute'(比如'viewDidDisappear')。 – Droppy 2014-10-09 07:05:27
1. doSomeSimpleThings在dealloc后不会调用。 2.只有当您的MyViewController将从堆栈中移除时,dealloc才会调用。所以在你的情况下,它不应该打电话。 – 2014-10-09 07:12:14