Foodie App 学习笔记:Thread Management

源自 NEW- CoreData for Swift Development (Swift 4.2 & iOS 12)

概述

该 App 一共三个服务,分别是 FoodieServiceLocationServiceRESTServiceFoodieServiceLocationService 获取的用户位置传递给 RESTService 提供的方法( 通过 HTTP 从远程服务器拉取 JSON 格式的数据),从而获取到 JSON 数据并解析处理,最终由 ViewController 展示出来。

CoreData 异步处理

点击保存按钮后,需要把当前列表内的餐馆信息持久化,这部分处理需要占用一些时间,所以当点击保存按钮后立即点击其他地方(比如返回主界面),这时就会感受到 App 的卡顿;因而需要根据实际情况做出一些判断,是否需要将持久化的逻辑异步处理,以提供更佳的用户交互体验。

视频中提到了有两种异步处理的方法,一种是新建一个 NSManagedObjectContext 对象,使用该对象做持久化;另一种是调用 perform 函数,将异步处理代码放入其代码块内。

newBackgroundContext

managedObjectContext.perform {}

managedObjectContext.perform { [weak self] in
    do { 
            // 得到列表信息
            try managedObjectContext.save()
        }
        catch let error {
            print("Save failed: \(error.localizedDescription)")
        }
}

若是需要同步等待处理完成,则可以使用:

managedObjectContext.performAndWait {} // 同步,等待

分类:iOS

Tagged as:

1 reply

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google photo

You are commenting using your Google account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理