2015-03-02 74 views
0

当用户启动我的应用程序时,我从websocket请求聊天系统的会话列表。 当WebSocket的响应请求,我分析的结果来建立会话,然后我解析消息,并将它们添加到每个会话的给messageManager,就像这样:iOS上的启动滞后

for (NSDictionary *session in sessions) { 
     for (NSDictionary *message in messages) { 

     ChatMessage *message = [[ChatMessage alloc] init]; 
     [listOfMessages addObject:message]; 

     } 
    } 

这导致一秒钟的延迟,在启动。我怎样才能减少它?

编辑:它把手机的CPU在100%几秒钟,这就是问题,而不是网络之一,因为我已经准备好了广告阵列上的所有JSON。

+0

难道您使用的异步请求? – 2015-03-02 15:18:33

+0

速度将取决于会话中包含的项目数量。如果这导致性能滞后,那么考虑将循环移动到后台线程 – humblePilgrim 2015-03-02 15:21:26

回答

0

我该如何减少它?

  • 负荷少前面。小型网络请求通常可以非常快地执行;如果您的启动需要一整秒,那么减少等待的一种方法是在第一次请求时加载较少的数据。您是否可以加载足够让用户在接下来的四五秒内开始使用您的应用程序?

  • 保留以前的数据。也许应用程序在前一个会话中加载的数据足以让用户继续执行几秒钟。使用这些数据,即使你不得不让用户知道它正在更新,也可以给你足够的时间来刷新应用程序。

  • 给用户一些事情要做。如果在处理完整请求之前绝对不能前进,那么也许可以在请求发生时提供一些有用或有趣的交互。即使在下载数据的过程中显示进度也足够了 - 任何可以防止应用程序在初始阶段都没有做任何事情的东西。

+0

是的,但它不是太多的数据。大概有10个聊天室,每个聊天室有10条消息。并且该问题未与网络请求链接。滞后是当我有JSONS时,我必须将它序列化为本地自定义对象。我如何在后台任务中移动它? – fustalol 2015-03-02 15:34:31

+0

用户一次只能看一个聊天室,对吧?因此,加载先前加载的内容可能有意义,之后加载其他内容,甚至仅在需要时才加载。你当然可以在后台任务中反序列化deta,你也应该在后台加载数据。如何做到这一点似乎超出了这个问题的范围,但有大量关于后台处理的文档。 – Caleb 2015-03-02 16:01:29

0

这个电话在后台队列:
1.使用GCD,并呼吁dispatch_async
2.创建您自己的NSOperationQueue并添加NSBlockOperation