首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未触发NSTimer

未触发NSTimer
EN

Stack Overflow用户
提问于 2012-10-31 11:55:18
回答 1查看 70关注 0票数 0

我使用下面的代码等待NSTimer触发

代码语言:javascript
复制
    -(void)timer1Fired :(NSTimer *) timer
    {

    isTriggered=true;

    }


    //----------------------------------------------
    isTriggered=false;

    [NSTimer scheduledTimerWithTimeInterval:1  
                                 target:self
                               selector:@selector(timer1Fired:)
                               userInfo:nil
                                repeats:NO];






    int j1 = 0;
    while ( !isTriggered && j1 <   1000)
    {

        [NSThread sleepForTimeInterval: 0.5];

        j1++;

    }
    //continue to do  something   //b

但看起来NSTimer永远不会被触发

欢迎您的评论

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-31 12:25:32

我不认为[NSThread sleepFortimeInterval]做了你期望它做的事情。你说得对,直到500秒长的while循环结束后,isTriggered:才会被执行。

此外,NSTimerNSThread都是老式的,您应该使用中央调度来代替它们(以取代它们)。GCD速度更快,使用的资源更少,而且更可靠/更强大。

https://developer.apple.com/library/mac/#documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html

代码语言:javascript
复制
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

  // do stuff on background thread

  dispatch_sync(dispatch_get_main_queue(), ^{

    // do stuff on main thread

  });
});

如果您希望避免使用低级can,可以使用NSOperationNSOperationQueue,它们是GCD的高级包装器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13151047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档