加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

iphone – 在执行之间暂停执行一个接一个的方法

发布时间:2020-12-15 01:47:58 所属栏目:百科 来源:网络整理
导读:新手obj-c问题. 我正在写一个简单的iPad演示文稿而不是Appstore.我的任务是实现一个接一个地执行的几个方法,它们之间几乎没有暂停.主要结构如下: 查看负载 暂停两秒钟,然后执行method1 暂停两秒钟,然后执行method2 暂停两秒钟,然后执行method3 等等… 我从-
新手obj-c问题.
我正在写一个简单的iPad演示文稿而不是Appstore.我的任务是实现一个接一个地执行的几个方法,它们之间几乎没有暂停.主要结构如下:

>查看负载
>暂停两秒钟,然后执行method1
>暂停两秒钟,然后执行method2
>暂停两秒钟,然后执行method3
等等…

我从-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];

您所要做的就是将所有内容添加到队列中,然后队列将自行管理.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读