gpt4 book ai didi

iphone - 函数 sleep() 和 [[NSRunLoop currentRunLoop] runUntilDate] 用法的区别

转载 作者:搜寻专家 更新时间:2023-10-30 19:56:34 24 4
gpt4 key购买 nike

请考虑以下代码片段:

在第一个中,我调用了一个创建动画的函数。我以一定的时间间隔这样做:

start:;

[self animationMethod];

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:3]];
//sleep(3);

goto start;

在第二个中我创建了一个动画

- (void)animationMethod
{
CAKeyframeAnimation *myAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
CGMutablePathRef curvedPath = CGPathCreateMutable();

CGPathMoveToPoint(curvedPath, NULL, start.x, start.y);
CGPathAddCurveToPoint(curvedPath, NULL, fcp.x, fcp.y, scp.x , scp.y, end.x, end.y);

myAnimation.path = curvedPath;
myAnimation.duration = flight_duration;
myAnimation.removedOnCompletion = NO;
myAnimation.delegate = self;
myAnimation.fillMode = kCAFillModeForwards;

[myAnimation setValue:identifier forKey:@"id"];

[flyingBug addAnimation:myAnimation forKey:@"bug_flight"];

CGPathRelease(curvedPath);
}

第三个是委托(delegate)方法,我用它来检查一切是否正常:

- (void)animationDidStart:(CAAnimation *)anim
{

NSLog(@"ANIMATION DID START");
}

所以当我使用 NSRunLoop 时它工作正常,委托(delegate)方法被调用,但是如果我尝试使用 sleep(3) 函数然后委托(delegate)方法不被叫到。

我的问题:

1) 你能解释一下 NSRunLoop 和 sleep() 之间的区别吗?为什么在使用 sleep() 时不调用委托(delegate)方法?

2)也许还有第三种可能的方法,使用起来更好?

最佳答案

NSRunLoop 更好,因为它允许 runloop 在您等待时响应事件。如果你只是休眠你的线程,即使事件到达(比如你正在等待的网络响应),你的应用程序也会阻塞。

关于iphone - 函数 sleep() 和 [[NSRunLoop currentRunLoop] runUntilDate] 用法的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9819004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com