我正在使用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");
}
答案 0 :(得分:5)
此方法[
performSelector:withObject:afterDelay:
]设置一个计时器,以在当前线程的运行循环上执行aSelector消息。
所以他们都做同样的事情。你的罪魁祸首在别处。
顺便说一句,你可能想看看CADisplayLink
。它是一个专门的计时器,以与屏幕刷新率相同的频率发射,专门用于你想要的声音。
答案 1 :(得分:2)
由于所有选择器/方法共享一个CPU和一个运行循环(UI运行循环,除非您另行指定),如果进行太多操作,定时器和延迟选择器将被延迟调用。你需要描述你的应用程序(工具),看看是什么占用了时间,从而使其他事情迟到。