执行方法相继与执行之间的暂停(Executing methods one after another

2019-07-03 19:29发布

新手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以执行不同的队列方法? 或者,也许在别的问题吗?

谢谢你,同事!

Answer 1:

你可以添加这些到的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];

所有您需要做的就是添加的东西到队列,队列然后将自己管理自己。



Answer 2:

您可以使用单一的计时器,写身边你想在你想执行的顺序来执行方法的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];


文章来源: Executing methods one after another with pauses between executing