(iphone)哪一个更精确的时间:performSelector:afterDelay vs NSTimer

eug*_*ene 1 iphone nstimer nsthread

我正在使用performSelector执行动画:withObject:afterDelay at 24fps.
(原因是,UIImageView不支持图像之间的不同间隔)
当我同时运行多个动画时,看起来像performselector排队的消息需要很长时间才能被拾取.

我想知道NSTimer还是另一个会是更好的选择.

谢谢

  • 编辑

除了运行动画之外我什么也没做.
我正在运行的选择器占用0.0003的时间.(几乎没有时间)
但是当我测量调用"performSelector"和选择器实际被调用的时间之间的时间时,实际上比我用"afterDelay"或" scheduledTimerWithDuration"

我已经查看了仪器,但无法弄清楚导致延迟的原因.
我刚刚看到线程相关(我猜线程暂停/恢复)活动很多.
也许我的下面的threadMain代码占用了很多时间?

- (void) myThreadMain
{
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

    // Add your sources or timers to the run loop and do any other setup.                                                                                                                                                                                                     
    NSRunLoop *runloop = [NSRunLoop currentRunLoop];
    [runloop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];

    do
    {
        // Start the run loop but return after each source is handled.                                                                                                                                                                                                        
        SInt32    result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, 10, YES);

    }
    while (self.isNeedToExit == false);

    [pool release];

    SYSLOG(LOG_DEBUG, "thread exiting");
}
Run Code Online (Sandbox Code Playgroud)

rge*_*rge 5

Apple说:

此方法[ performSelector:withObject:afterDelay:]设置一个计时器,以在当前线程的运行循环上执行aSelector消息.

所以他们都做同样的事情.你的罪魁祸首在别的地方.

顺便说一下,你可能想看看CADisplayLink.它是一个专门的计时器,以与屏幕刷新率相同的频率发射,专门用于你想要做的事情.