将主线程阻塞操作置于Objective-C中的最佳生命周期方法

时间:2018-11-07 21:19:53

标签: ios lifecycle dispatch

我的应用程序与类似于Apple Mail应用程序的服务器同步。尽管同步是在后台线程上进行的,但是由于同步会非常严重地影响核心数据,所以我发现有必要在同步期间阻止与用户控件的交互,以免其他操作会影响核心数据并造成问题。

我一直在将同步显示在“将出现”中,以使手机和服务器保持恒定同步。但是,在有大量数据的情况下,我注意到同步时间太长,这是不可接受的...也就是说,它将线程占用了五到十秒钟。我尝试将其放置在viewdidload中,这样它被调用的次数减少了,但是在刚打开应用程序时等待它仍然很烦人。

我注意到Apple不会立即同步邮件,而是要等待几秒钟,以便一开始不占用应用程序。这给了您一种幻觉,您不必等待(尽管实际上您通常会这样做)。

我想知道生命周期中是否存在一个更好的同步位置,例如viewdidappear,以及是否有一种方法可以在您进入视图五到十秒后使用延迟来启动同步不太显眼的控制器。

预先感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

首先在任何情况下,异步操作都不建议阻塞主线程,因为用户会认为该应用已挂起并退出

其次 viewDidAppear是用于说说它在vc中导航时的更新,导航返回并刷新内容或关闭模型,除了这2件事之外,{ {1}},但有延迟开销

最后,如果您需要将邮件与服务器同步,则有2个选项

  • 每隔固定时间(不推荐)使用计时器抓取数据

  • 使用静默推送通知来向应用程序通知服务器新内容,并在收到请求后启动拉取过程