在执行之间暂停执行方法

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

  • 查看负载
  • 暂停两秒,然后执行方法1
  • 两秒钟暂停,然后执行方法2
  • 两秒钟暂停,然后执行method3等…

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

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

在这里一切正常,方法开始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的子类来做到这一点,但这是很多工作没有太大的好处。

从任何你想要的地方运行这个,我build议把所有这些放到一个名为setUpQueue的函数中。

然后从viewWillAppear或viewDidLoad或其他地方,按下button等等…做…

 [self setUpQueue]; 

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

您可以使用单个计时器,并按照要执行的顺序在要执行的方法周围写入一个switch语句。 例如

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

然后在运行方法

 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]; 
Interesting Posts