新手 obj-c 问题。
我正在编写一个简单的 iPad 演示文稿,不适用于 Appstore。我的任务是实现几个相继执行的方法,并且它们之间几乎没有停顿。主要结构如下:
- 查看负载
- 暂停两秒,然后执行method1
- 暂停两秒,然后执行method2
- 暂停两秒,然后执行method3
ETC...
我从 -viewDidLoad 调用的第一个方法:
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(firstCountStarts) userInfo:nil repeats:NO];
这里一切正常,方法在视图加载后 2 秒启动。
从 method1 内部,我尝试以相同的方式调用方法 2,但它开始与 method1 同时执行。同样的方式触发了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];
您所要做的就是将内容添加到队列中,然后队列将自行管理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)