2015-03-02 90 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