成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

iOS網(wǎng)絡(luò)開發(fā)(5)請求的緩存-創(chuàng)新互聯(lián)

有網(wǎng)絡(luò)請求的App有可能出現(xiàn)兩個問題:

章貢ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

    1)遇到網(wǎng)絡(luò)不暢或數(shù)據(jù)量較大的情況下,會出現(xiàn)由于數(shù)據(jù)到達(dá)不及時使用不流暢的問題

    2)頻繁發(fā)送網(wǎng)絡(luò)請求,可能造成沒必要的流量產(chǎn)生以及拖累手機(jī)速度的問題

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

針對問題二,通常采用適當(dāng)?shù)木彺娌呗?,?jié)省網(wǎng)絡(luò)開銷

  • 延遲加載

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

如以下場景:

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

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

   如果當(dāng)所有數(shù)據(jù)全部加載后再進(jìn)行UI顯示,圖片的下載是非常耗時的,影響到App的體驗(yàn)。

解決方案:

   當(dāng)?shù)谝淮握埱螳@得列表數(shù)據(jù)后,即將所有數(shù)據(jù)顯示出來,圖片顯示的位置顯示一個占位圖片

   使用異步的網(wǎng)絡(luò)請求下載圖片資源,當(dāng)圖片被下載之后立刻更新UI進(jìn)行處理

示例說明:

    a. 發(fā)送一個GET請求數(shù)據(jù)獲一定數(shù)量的游戲人物信息

    iOS網(wǎng)絡(luò)開發(fā)(5)請求的緩存

    b. UITableView的數(shù)據(jù)源方法

    iOS網(wǎng)絡(luò)開發(fā)(5)請求的緩存

        可以看到單元格cell為其模型屬性heroModel賦值的內(nèi)容是網(wǎng)絡(luò)請求后的模型數(shù)據(jù)

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

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

    iOS網(wǎng)絡(luò)開發(fā)(5)請求的緩存

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

    改用延遲加載后的代碼:

    iOS網(wǎng)絡(luò)開發(fā)(5)請求的緩存

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

        這樣做,即使網(wǎng)絡(luò)不暢或圖片較大時也不會出現(xiàn)UI界面卡頓的情況

  • 緩存的引入

上面的解決方案,在一定情況下提升了用戶的體驗(yàn),但針對tableView來說,性能上可能還存在一定的問題:當(dāng)tableView上下拖動過程中,會產(chǎn)生tableView的重用機(jī)制,意味著上面的代碼將會重復(fù)執(zhí)行,也就意味著下載圖片的網(wǎng)絡(luò)請求將重復(fù)發(fā)送

磁盤緩存:

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

緩存的使用:

   對于需要頻繁加載的數(shù)據(jù),應(yīng)使用本地緩存

   對于服務(wù)器經(jīng)常會更新的數(shù)據(jù),不應(yīng)使用本地緩存

   對于服務(wù)器偶爾會更新的數(shù)據(jù),應(yīng)修改該緩存策略

  • NSURLRequest的緩存機(jī)制

在創(chuàng)建請求對象時可以指定使用的緩存策略

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

上面的延遲加載實(shí)例中:

    請求任務(wù)數(shù)據(jù)應(yīng)當(dāng)使用NSURLRequestReloadIgnoringLocalCacheData方式

    iOS網(wǎng)絡(luò)開發(fā)(5)請求的緩存

    延遲加載圖片應(yīng)使用NSURLRequestReturnCachedDataElseLoad方式:

    iOS網(wǎng)絡(luò)開發(fā)(5)請求的緩存

  • NSURLCache緩存策略

請求的緩存數(shù)據(jù),通過NSURLCache管理

全局對象:

+ (NSURLCache *)sharedURLCache

獲得緩存對象

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

緩存對象NSCachedURLResponse的屬性

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

清理緩存數(shù)據(jù)

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

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

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

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

示例說明:

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

    iOS網(wǎng)絡(luò)開發(fā)(5)請求的緩存

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)頁名稱:iOS網(wǎng)絡(luò)開發(fā)(5)請求的緩存-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://jinyejixie.com/article48/ccppep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、軟件開發(fā)、商城網(wǎng)站微信公眾號、網(wǎng)站維護(hù)、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
大余县| 拉孜县| 卫辉市| 交口县| 南安市| 泗阳县| 平泉县| 维西| 武隆县| 新乡市| 道真| 深泽县| 边坝县| 青岛市| 金川县| 德惠市| 白玉县| 丁青县| 乌恰县| 阳曲县| 和顺县| 辽源市| 长岛县| 正阳县| 日土县| 喀什市| 尼勒克县| 确山县| 竹山县| 南漳县| 确山县| 东乡县| 曲阜市| 万州区| 建宁县| 郴州市| 凤城市| 商都县| 昭觉县| 灌南县| 大城县|