在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