中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS網絡開發(5)請求的緩存

發布時間:2020-07-23 11:06:26 來源:網絡 閱讀:1356 作者:ymanmeng123 欄目:移動開發

有網絡請求的App有可能出現兩個問題:

    1)遇到網絡不暢或數據量較大的情況下,會出現由于數據到達不及時使用不流暢的問題

    2)頻繁發送網絡請求,可能造成沒必要的流量產生以及拖累手機速度的問題


針對問題一,通常采用的策略是:延遲加載大數據的請求

針對問題二,通常采用適當的緩存策略,節省網絡開銷


  • 延遲加載

在網絡請求中,比較大的資源,如圖片、視頻等,需要做一些特殊處理以提升App的性能

如以下場景:

     請求一個列表數據,每個數據包含:字符串、圖片URL,tableView中需要顯示這些數據

     這里設計到多次請求,第一個請求得到列表數據,之后多次請求下載所有圖片。

     如果當所有數據全部加載后再進行UI顯示,圖片的下載是非常耗時的,影響到App的體驗。


解決方案:

     當第一次請求獲得列表數據后,即將所有數據顯示出來,圖片顯示的位置顯示一個占位圖片

     使用異步的網絡請求下載圖片資源,當圖片被下載之后立刻更新UI進行處理


示例說明:

    a. 發送一個GET請求數據獲一定數量的游戲人物信息

    iOS網絡開發(5)請求的緩存

    b. UITableView的數據源方法

    iOS網絡開發(5)請求的緩存 

        可以看到單元格cell為其模型屬性heroModel賦值的內容是網絡請求后的模型數據

    c. 單元格模型屬性的setter方法

    先看未使用延遲加載前的代碼:

    iOS網絡開發(5)請求的緩存

        最后圖片的顯示,直接使用的同步方式請求,由于圖片資源較大,UI界面會出現卡頓的情況

    改用延遲加載后的代碼:

    iOS網絡開發(5)請求的緩存

        先顯示一個占位圖片,然后異步請求圖片資源,請求完成后再顯示圖片

        這樣做,即使網絡不暢或圖片較大時也不會出現UI界面卡頓的情況


  • 緩存的引入

上面的解決方案,在一定情況下提升了用戶的體驗,但針對tableView來說,性能上可能還存在一定的問題:當tableView上下拖動過程中,會產生tableView的重用機制,意味著上面的代碼將會重復執行,也就意味著下載圖片的網絡請求將重復發送


磁盤緩存:

     在第一次請求時,將請求的結果存儲在本地,下一次發送同一請求時,直接從本地獲取緩存即可

緩存的使用:

     對于需要頻繁加載的數據,應使用本地緩存

     對于服務器經常會更新的數據,不應使用本地緩存

     對于服務器偶爾會更新的數據,應修改該緩存策略


  • NSURLRequest的緩存機制

在創建請求對象時可以指定使用的緩存策略     

+ (instancetype)requestWithURL:(NSURL *)theURL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval
@property(readonly) NSURLRequestCachePolicy cachePolicy
enum{
     NSURLRequestUseProtocolCachePolicy = 0,     //使用協議的緩存策略
     NSURLRequestReloadIgnoringLocalCacheData = 1, //不使用本地緩存
     NSURLRequestReturnCacheDataElseLoad = 2,     //使用磁盤緩存
     NSURLRequestReturnCacheDataDontLoad = 3, //只使用磁盤緩存,不進行網絡加載
};
typedef NSUInteger NSURLRequestCachePolicy;


上面的延遲加載實例中:

    請求任務數據應當使用NSURLRequestReloadIgnoringLocalCacheData方式

    iOS網絡開發(5)請求的緩存

    延遲加載圖片應使用NSURLRequestReturnCachedDataElseLoad方式:

    iOS網絡開發(5)請求的緩存


  • NSURLCache緩存策略

請求的緩存數據,通過NSURLCache管理

全局對象:   

+ (NSURLCache *)sharedURLCache

獲得緩存對象

- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request

緩存對象NSCachedURLResponse的屬性

@property(readonly, copy) NSData *data
@property(readonly, copy) NSURLResponse *response

清理緩存數據

- (void)removeCachedResponseForRequest:(NSURLRequest *)request
- (void)removeAllCachedResponses

     App中通常需要,定期清理緩存

通過NSURLCache對象可以管理緩存的空間,緩存的控件可以是內存,也可以是磁盤

@property(readonly) NSUInteger currentDiskUsage
@property NSUInteger diskCapacity
@property(readonly) NSUInteger currentMemoryUsage
@property NSUInteger memoryCapacity


示例說明:

    在AppDelegate中添加代碼,每5分鐘檢測一次磁盤緩存的占用是否超過一半,如果是則發出緩存需要清理的通知(當然,也可以直接進行清理)

    iOS網絡開發(5)請求的緩存








向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

句容市| 井冈山市| 姚安县| 营口市| 南华县| 皮山县| 建水县| 佛山市| 揭阳市| 潮州市| 盱眙县| 兰坪| 宁国市| 共和县| 罗源县| 尼勒克县| 朝阳区| 台州市| 邹平县| 南城县| 柳河县| 衡南县| 余庆县| 宾阳县| 田阳县| 曲松县| 加查县| 吉安市| 辽阳县| 泾川县| 珠海市| 柳林县| 华宁县| 武平县| 南皮县| 盐边县| 大庆市| 嘉义市| 芦溪县| 额济纳旗| 秦皇岛市|