设置
假设有两个视图控制器:PostsVC
和PostDetailVC
。在PostsVC
中,有100个帖子已加载。每个帖子都显示其正文,作者和评论数量。
问题
当用户首次打开应用时,将从API服务器获取100个帖子。然后他可以去其中一个帖子并对其进行评论。他回到PostsVC
并意识到评论的数量仍为0
。
我的解决方案
PostsVC
可以让观察者收听某个帖子的updateNumComment
。然后,在PostDetailVC
中,我可以通知评论数量发生了变化。
天真的解决方案
每次返回PostsVC
时,我都可以从API服务器获取最新的posts
信息(在viewWillAppear
中完成)。但是,由于100个帖子中只有一个被更新,因此浪费了网络资源。
混乱
朴素的解决方案似乎运作良好。我不知道它是在获取100个帖子还是只有1个帖子。如果有更多信息需要同步,我的解决方案会变得复杂,例如评论数量,投票数,评论用户数等等。我的解决方案不是必需的?我是否在思考这个问题?
答案 0 :(得分:0)
这是在优化用户体验的同时最大限度地减少网络使用率的问题。
由于您已经知道您的天真解决方案浪费了网络资源,因此您应该避免这种情况。
接下来的问题是如何在最小化服务器调用的同时更新UI。您已声明在新解决方案中,您希望使用PostsVC
中的观察者来获取评论和其他详细信息的更改。管理观察者有额外的开销,例如注册和删除。
我的建议是在PostDetailVC
中声明委托协议,我假设这是输入注释的地方,并且PostsVC
符合此协议。添加注释后,调用委托方法以通知PostsVC
更改,以便通过递增注释计数立即更新UI。
然后,您可以在后台线程上将本地数据与服务器数据同步。在更新评论的网络请求的完成块中,更新帖子的上次更新日期,以最小化未来的网络请求。