0

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

    -(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 永远不会被触发

欢迎任何评论

4

1 回答 1

0

我不认为[NSThread sleepFortimeInterval]你期望它做的事情。你是对的,isTriggered:直到你的 500 秒长的 while 循环完成后才会执行。

此外,NSTimer并且NSThread都是老式的,您应该改用 Grand Central Dispatch(替换它们)。GCD 速度明显更快,使用的资源更少,而且它也更可靠/更强大。

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

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

  });
});

如果你想避免使用低级 C API,你可以使用NSOperationand NSOperationQueue,它是 GCD 的高级包装器。

于 2012-10-31T04:25:32.060 回答