簡體   English   中英

iOS應用程序:什么時候應該清除緩存數據? (使用領域)

[英]iOS app: When should I clear my cache data? (using Realm)

在我的iOS應用中,我將特定數據(包含緩存模型的Realm DB)保存在設備的緩存目錄中的磁盤上。 當用戶使用該應用程序時,緩存數據會增加,因此我想定期清除舊的緩存數據。

問題是我不知道如何檢查要刪除的模型是否被當前視圖使用。 (通過嘗試刪除所有模型,我得到一個錯誤,告訴您當前視圖使用的某些模型對象已失效。)

為了確保當前不使用我要刪除的緩存模型,當應用終止時,我目前正在清理緩存:

- (void)applicationWillTerminate:(UIApplication *)application {
    [[ModelManager sharedInstance] deleteUnusedCacheModels];
}

deleteUnusedCacheModels中的示例代碼:

        NSDate* limitDate = [NSDate dateWithTimeIntervalSinceNow:-(60.0 * 60.0 * 24.0 * 7.0)];
        RLMResults* modelProductListArray = [ModelProductList objectsInRealm:_cacheDb
                                                                       where:@"modelUpdate < %@ || modelDelete = %@", limitDate, @YES];
        [_cacheDb deleteObjects:modelProductListArray];

但是,如果用戶不經常終止應用程序,則不會執行此代碼。 (大多數用戶將應用留在后台。)

有沒有更好的方法來清除緩存的模型數據?

謝謝。

我得到了以下解決方案。

模型中的實現:

  • 設置屬性NSDate * modelUpdate,該屬性指示模型的最新更新。 對於應在舊時刪除的模型。
  • 在每個需要刪除的模型中設置屬性BOOL modelDelete。 但是在應用程序運行時請勿刪除任何內容。 (因此,內存中的現有模型不會失效)

在服務器請求上回收緩存模型的策略:

  1. 檢查是否存在給定服務器請求的緩存模型列表(例如緩存A)。 (其中modelDelete = NO)
  2. 並行地,即使存在緩存,也可以在后台向服務器運行請求。
  3. 使用緩存A可以盡快向用戶顯示內容。 (不要讓用戶等待)
  4. 對服務器的請求完成后,將新結果保存到緩存中。 (緩存B)
  5. 使用新數據,淡入淡出等方式來更新用戶所看到的內容。
  6. 標記所有要刪除的緩存A模型。 (modelDelete =是)

在以下時間刪除緩存:

  • 應用啟動時。 (didFinishLaunchingWithOptions)
  • 應用終止時。 (applicationWillTerminate)

用這樣的代碼:

NSDate* limitDate = [NSDate dateWithTimeIntervalSinceNow:-(60.0 * 60.0 * 24.0 * 7.0)];
RLMResults* modelProductListArray = [ModelProductList objectsInRealm:_cacheDb
                                                               where:@"modelUpdate < %@ || modelDelete = YES", limitDate];
[_cacheDb deleteObjects:modelProductListArray];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM