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)
Apple说:
此方法[
performSelector:withObject:afterDelay:]设置一个计时器,以在当前线程的运行循环上执行aSelector消息.
所以他们都做同样的事情.你的罪魁祸首在别的地方.
顺便说一下,你可能想看看CADisplayLink.它是一个专门的计时器,以与屏幕刷新率相同的频率发射,专门用于你想要做的事情.