gpt4 book ai didi

iphone - 一个接一个地执行方法,执行之间有暂停

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:03:59 26 4
gpt4 key购买 nike

新手 obj-c 问题。我正在为 Appstore 编写一个简单的 iPad 演示文稿。我的任务是实现几个方法,一个接一个地执行,中间几乎没有停顿。主要结构如下所示:

  • 查看负载
  • 停顿两秒,然后执行method1
  • 停顿两秒,然后执行方法2
  • 停顿两秒,然后执行方法3等等……

我从 -viewDidLoad 调用的第一个方法:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(firstCountStarts) userInfo:nil repeats:NO];

这里一切正常,方法在 View 加载后 2 秒开始。从方法 1 内部,我尝试以相同的方式调用方法 2,但它开始与方法 1 同时执行。同样的方式触发了 method3(从 method2 调用)并且它们之后的所有方法根本没有执行。我试图将所有这些方法放在 -ViewDidLoad 中并延迟调用它们:

 [self method1];
[self performSelector:@selector(method2) withObject:nil afterDelay:2];
[self performSelector:@selector(method3) withObject:nil afterDelay:4];
etc...

但是method2在调用之后所有的方法都没有执行。如果我理解线程中的问题。我需要使用 GCD 来执行不同队列中的方法吗?还是其他方面的问题?

谢谢各位同事!

最佳答案

您可以将它们添加到 NSOperation 队列中...

NSOperationQueue *queue = [NSOperationQueue new];

queue.maxConcurrentOperationCount = 1;

[queue addOperationWithBlock:^{
[self method1];
}];

[queue addOperationWithBlock:^{
[NSThread sleepForTimeInterval:2.0];
[self method2];
}];

[queue addOperationWithBlock:^{
[NSThread sleepForTimeInterval:2.0];
[self method3];
}];

...

这将仅在前一个完成后运行每个,并为您延迟 2 秒。

但要小心使用它来做 UI 的东西。这将在后台线程中运行,因此您可能需要处理它。

也许这可能会更好,您可以通过子类化 NSOperation 来做到这一点,但这需要做很多工作而没有太大好处。

从你想要的任何地方运行它,我建议将所有这些放入一个名为 setUpQueue 或其他东西的函数中。

然后从 viewWillAppear 或 viewDidLoad 或其他地方,按下按钮等...做...

[self setUpQueue];

您所要做的就是向队列添加内容,然后队列将自行管理。

关于iphone - 一个接一个地执行方法,执行之间有暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13375846/

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