新手OBJ-C的问题。 我写一个简单的iPad演示不是苹果商店。 我的任务是贯彻执行相继与他们之间几乎没有停顿一些方法。 主要结构是这样的:
- 鉴于负荷
- 2秒暂停,然后执行方法1
- 2秒暂停,然后执行方法2
- 2秒暂停,然后执行方法3等..
第一种方法是我从调用-viewDidLoad:
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(firstCountStarts) userInfo:nil repeats:NO];
一切都OK了这里,方法观负载2秒钟后启动。 从内部方法1我尝试调用方法2相同的方式,但它开始与方法1同时执行。 之后他们根本没有执行同样的方式方法3触发(从方法2调用)和所有方法。 我试图在宅院和-viewDidLoad他们具有时滞调用所有这些方法:
[self method1];
[self performSelector:@selector(method2) withObject:nil afterDelay:2];
[self performSelector:@selector(method3) withObject:nil afterDelay:4];
etc...
但方法2呼吁所有方法之后后没有执行。 如果我理解正确的线程中的问题。 我是否需要使用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];
所有您需要做的就是添加的东西到队列,队列然后将自己管理自己。
您可以使用单一的计时器,写身边你想在你想执行的顺序来执行方法的switch语句。 例如
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];