新手obj-c问题。 我正在写一个简单的iPad演示文稿而不是Appstore。我的任务是实现一个接一个地执行的几个方法,它们之间几乎没有暂停。主要结构如下:
我从-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在不同的队列中执行方法?或者可能是其他问题?
谢谢,同事们!
答案 0 :(得分:8)
您可以将这些添加到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];
您只需要向队列中添加内容,然后队列将自行管理。
答案 1 :(得分:0)
您可以使用单个计时器,并按照要执行的顺序围绕要执行的方法编写switch语句。 e.g。
int turn = 0;
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(runmethod) userInfo:nil repeats:NO];
然后在run方法
switch(turn)
{
case 0:
// do method 1 stuff
++turn;
break;
case 1:
// do method 2 stuff
++turn;
break;
.
.
.
}
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(runmethod) userInfo:nil repeats:NO];