【问题标题】:Best Life Cycle Method to Place Main Thread-Blocking Operation in Objective-C在 Objective-C 中放置主线程阻塞操作的最佳生命周期方法
【发布时间】:2018-11-07 21:19:52
【问题描述】:

我的应用与类似于 Apple Mail 应用的服务器同步。虽然同步发生在后台线程上,因为它对核心数据的影响很大,但我发现有必要在同步期间阻止与用户控件的交互,以免其他一些操作影响核心数据并产生问题。

我一直在 View Will Appear 中进行同步,以保持手机和服务器持续同步。但是,对于大量数据,我注意到同步时间长得令人无法接受……也就是说,它会占用线程五到十秒钟。我尝试将它放在 viewdidload 中,以减少调用它的频率,但是当您刚刚打开应用程序时等待仍然很烦人。

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

我想知道生命周期中是否有一个位置更适合同步,例如 viewdidappear 以及是否有一种方法可以在您进入视图后 5 或 10 秒使用延迟来启动同步控制器不那么显眼。

提前感谢您的任何建议。

【问题讨论】:

    标签: ios lifecycle dispatch


    【解决方案1】:

    首先阻塞主线程在任何情况下都不是异步操作的首选,因为用户会认为应用程序挂起并退出它

    其次 viewDidAppear 用于更新,当说它在导航返回的 vc 中并返回以刷新内容或关闭模型时,除了那两件事它会像 viewDidLoad有延迟的开销

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

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

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

    【讨论】:

    • 我的同步使用 Apple 推荐的代码为核心数据片使用背景线程和私有 MOC。但是,我注意到当用户被允许同时做其他事情时不稳定,尽管从多个线程访问核心数据时似乎会发生单独的 MOC。
    猜你喜欢
    • 1970-01-01
    • 2018-02-16
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    相关资源
    最近更新 更多