iOS数据同步和导入

时间:2016-01-11 16:50:46

标签: ios objective-c

我正在编写涉及消息传递的iOS应用程序,因为这是该应用程序的唯一功能之一,我正在尝试优化导入和同步过程,以便对其产生最小的影响。用户体验。

我想知道的是:

保持我的应用与后端同步的架构模式(持久性不可知)的最佳类型是什么?

我现在有什么:

我有一个单独的NSObject类,我们称之为“经理”。

本课程维护:

  • 运行整个应用程序生命的NSThread。
  • 几个NSDate属性,表示上次发生特定“完全同步”或“配置文件同步”的时间。

我从几个来源读到NSThread有更好的替代品(比如GCD),但还没有真正看到任何适合我的用例的例子。我想我真正想要问的是,只要有一个带有定时器的类来保持应用程序同步而不是长时间运行的NSThread会更好(更高效)。

2 个答案:

答案 0 :(得分:1)

发送服务器时间(时间戳)以及来自服务器的响应。

在您的客户端上,您可以节省这些时间并将其与每个将来的请求一起发送。每个请求还必须更新此更新令牌"。

现在,您的服务器可以非常简单地确定您已拥有和不拥有的内容。

我非常确定有更好更复杂的方法,但是当您的服务器自上次查询后发送所有内容(甚至错过/过时)时,您甚至不需要进行某种完整性检查。

我认为有很多好的和正确的答案。这完全取决于用例。

然而,这是我在我的一个B2B应用程序中使用的一个简单概念。

答案 1 :(得分:0)

首先在经理类中创建Dependency注入器。假设您有8个型号,M1,M2,M3,N1,N2,N3,K1,K2。

除非并且直到M1模型未更新,否则您无法更新M2,并且类似于N1-> N2和K1-> K2。

现在,对于每个序列,在Manager级别创建单独的自定义dispatch_queue_t对象。

e.g。

dispatch_async(CUSTOM_QUEUE_1, ^{
    NSURLSession *session = [NSURLSession sharedSession];
    [[session dataTaskWithURL:[NSURL URLWithString:@"http://url1"]
        completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
            // update model updated time and start next dependent request
            [[session dataTaskWithURL:[NSURL URLWithString:@"http://url2"]
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                // update model updated time and start next dependent request
                .....
            }] resume];

        }] resume];
});


dispatch_async(CUSTOM_QUEUE_2, ^{
    NSURLSession *session = [NSURLSession sharedSession];
    [[session dataTaskWithURL:[NSURL URLWithString:@"http://url3"]
        completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
            // update model updated time and start next dependent request
            [[session dataTaskWithURL:[NSURL URLWithString:@"http://url4"]
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                // update model updated time and start next dependent request
                .....
            }] resume];

        }] resume];
});