IOS - performSelector:withObject:afterDelay:NOT WORKING

isa*_*ent 9 iphone objective-c ios

参考:

/sf/answers/1031887741/

就像上面说的链接一样,但似乎并没有解释原因.

在我的代码中,以下内容将起作用:

dispatch_async(dispatch_get_main_queue(), ^{
       [self performSelector:  @selector(helloWorld) withObject:nil afterDelay:0.5];
}); 
Run Code Online (Sandbox Code Playgroud)

但是,当我评论这样的事情时,(我确信我在主线程中运行它!!)代码不起作用:

//    dispatch_async(dispatch_get_main_queue(), ^{
        [self performSelector:  @selector(helloWorld) withObject:nil afterDelay: 0.5];
//    });
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我为什么吗? '自我',将神经释放/解除分配,我保留它直到申请结束.

"不工作",意味着,(没有崩溃)它不会跳转到"helloWorld"方法:

-(void) helloWorld {
    NSLog(@"hello world");     // I set a break point here for debug , it wouldn't pause forever
}
Run Code Online (Sandbox Code Playgroud)

我认为Run Loop会导致这个问题.喜欢这个链接说,但我需要更多细节或更明确的解释.

Wal*_*ers 24

当我发生这种事情时,我从GCD调度中调用performSelector.所以它是在GCD工作线程中设置定时器,它在定时器触发之前就消失了.当GCD删除了工作线程时,计时器丢失,因此从未调用选择器.

  • OP:"我确定我在主线程中运行它". (2认同)