将主线程阻塞操作放在 Objective-C 中的最佳生命周期方法
Best Life Cycle Method to Place Main Thread-Blocking Operation in Objective-C
我的应用程序与类似于 Apple Mail 应用程序的服务器同步。虽然同步发生在后台线程上,但因为它对核心数据的影响相当大,我发现有必要在同步期间阻止与用户控件的交互,以免其他一些操作影响核心数据并产生问题。
我一直在 View Will Appear 中进行同步,以保持 phone 和服务器持续同步。但是,随着数据量的增加,我注意到同步时间长得令人无法接受……也就是说,它会将线程占用五到十秒。我尝试将它放在 viewdidload 中,这样它就不会那么频繁地被调用,但是当你刚打开应用程序时等待它仍然很烦人。
我注意到 Apple 不会立即同步邮件,而是会等待几秒钟,以免一开始就占用应用程序。这给你一种错觉,你不必等待(尽管实际上你通常需要等待)。
我想知道生命周期中是否有一个地方更适合同步,例如 viewdidappear 以及是否有一种方法可以在您进入后五到十秒使用延迟启动同步不那么显眼时的视图控制器。
提前感谢您的任何建议。
首先阻塞主线程在任何情况下都不是异步操作的首选,因为用户会认为应用挂起并会退出它
其次 viewDidAppear
用于更新时说它在 vc 导航 returns 以返回刷新内容或关闭一个模型,除了那两件事之外,它会像 viewDidLoad
一样使用 delay
的开销
最后 如果您需要将邮件与服务器同步,您有 2 个选择
每隔固定时间抓取数据(不推荐)用定时器说
使用静默推送通知将服务器新内容通知应用程序并在收到后启动拉取过程
我的应用程序与类似于 Apple Mail 应用程序的服务器同步。虽然同步发生在后台线程上,但因为它对核心数据的影响相当大,我发现有必要在同步期间阻止与用户控件的交互,以免其他一些操作影响核心数据并产生问题。
我一直在 View Will Appear 中进行同步,以保持 phone 和服务器持续同步。但是,随着数据量的增加,我注意到同步时间长得令人无法接受……也就是说,它会将线程占用五到十秒。我尝试将它放在 viewdidload 中,这样它就不会那么频繁地被调用,但是当你刚打开应用程序时等待它仍然很烦人。
我注意到 Apple 不会立即同步邮件,而是会等待几秒钟,以免一开始就占用应用程序。这给你一种错觉,你不必等待(尽管实际上你通常需要等待)。
我想知道生命周期中是否有一个地方更适合同步,例如 viewdidappear 以及是否有一种方法可以在您进入后五到十秒使用延迟启动同步不那么显眼时的视图控制器。
提前感谢您的任何建议。
首先阻塞主线程在任何情况下都不是异步操作的首选,因为用户会认为应用挂起并会退出它
其次 viewDidAppear
用于更新时说它在 vc 导航 returns 以返回刷新内容或关闭一个模型,除了那两件事之外,它会像 viewDidLoad
一样使用 delay
最后 如果您需要将邮件与服务器同步,您有 2 个选择
每隔固定时间抓取数据(不推荐)用定时器说
使用静默推送通知将服务器新内容通知应用程序并在收到后启动拉取过程