1. 程式人生 > >iOS三級快取庫的實現心得

iOS三級快取庫的實現心得

前段時間因為工作需要就自己寫了一個iOS的三級快取庫主要用來快取文字(快取到資料庫中)和圖片(快取到自己指定的本地目錄下)。

注:其實利用現有的第三方庫(比如:SDWebImage, EGOImage)可以完成我們的大部分功能,但這裡有一些定製化的功能,比如不同模組的圖片要快取在不同的目錄中,以便於以後查詢和清理,所以就選擇了自己來封裝一個。

在寫這個庫時,學到了很多封裝東西時的思想,比如先要明確需求是什麼,在明確需求後,接下來要定義實現需求所需要的介面,然後再根據定義的上層介面來定義完成上層介面功能所需要的底層介面,這樣一層層的深入逐漸細化功能,直到介面功能不可再分,接下來從最底層介面的功能,緊接著其上層介面呼叫底層介面來完成上層介面的功能,這樣一層層的向上回溯,直到實現最上層定義的介面的功能。

用這種方式寫一個很複雜的庫時,可以將一個很複雜的功能,逐步分解很多相對容易實現的小功能,同時從介面的呼叫關係上可以很容易的看出功能邏輯實現的過程。這樣既使得功能的邏輯變得清晰(易於理解),也將一些獨立的功能模組分離開來,避免使整個複雜的功能邏輯都寫在一起(這樣會使得邏輯看上起非常複雜而難以理解),實現了獨立功能之間的解耦。

下面簡單介紹下這個庫實現的過程。按照上面的分析過程,首先我們的需求是:要快取文字和圖片 ,同時還要定期清理一些已經不用的本地圖片(這裡採取的策略是每次啟動應用程式檢查無用的圖片然後清理)。其中文字要快取到資料庫中,圖片要快取到特定的本地目錄下(有時是庫本身寫死的一個本地目錄,有時是客戶端指定的本地目錄,當然可設定一個預設的快取目錄,當客戶端未指定目錄時,就快取在預設的快取目錄下)。

明確了需求就可以思考如何設計介面來實現我們的需求了。首先我們定義一個最上層的供客戶端直接使用的類,可命名為CacheManager。CacheManager類中定義了客戶端所要呼叫的關於文字與圖片所有操作的介面。

首先討論文字部分。我們專案中預置了一個包含很多屬於同一資料結構但資料內容不同的模型的文字的text檔案。我們的思路是程式啟動時首先檢查資料庫中是否有這一結構的表,如果有就從資料庫中讀取,然後顯示在介面上。如果沒有就從我們預置的text檔案中讀取該結構的資料,然後顯示在介面上(測了一下該過程不會耗費太多時間,就將從檢查到顯示的整個過程都放在了主執行緒中進行,因為檢查資料與顯示資料不是在同一個介面進行,這樣做也是為了資料的同步)。下面來定義相應介面,(時間關係,未完待續)

相關推薦

iOS三級快取實現心得

前段時間因為工作需要就自己寫了一個iOS的三級快取庫主要用來快取文字(快取到資料庫中)和圖片(快取到自己指定的本地目錄下)。 注:其實利用現有的第三方庫(比如:SDWebImage, EGOImage)可以完成我們的大部分功能,但這裡有一些定製化的功能,比如不同模組的圖片要

WheelView實現省市區三級聯動(數據實現版本號附帶完整SQL及數據)

tdi delet avi ipp cte public lis 網上 count() 近期在實現收貨地址功能。用到了省市區三級聯動效果。網上找到一般都是xml或json,數據源陳舊改動麻煩,改動了一下使用數據庫方式實現了一下 數據源解決,因為數據量

dede織夢調用頂級二級欄目及下三級欄目方法(數據實現)

很多 limit -- str 名稱 list 自帶 如果 效果 上次有說道能調用織夢的二級欄目今天來說道說道調用三級,乃至無限極 ①:通過dede調用二級欄目大家都會調用,但要調用三級欄目,就有點麻煩了,如下樣式的三級欄目dede如何調用呢?如下: --------

iOS】通過NSURLProtocol實現網頁載入本地快取資料

一.專案需求 專案中有個海報生成功能,使用UIWebView載入一些網頁,因為海報使用率比較高,有時載入網頁比較慢會影響使用者體驗,因此我們在APP啟動後,將一些固定資源,如css、圖片等,先快取到本地。載入網頁時,通過NSURLProtocol,優先使用本地的檔案,以加快網頁載入速

自己動手實現Android中的三級快取框架

前言 2018年過去了,很久之前就希望自己可以潛心研究原始碼,研究技術,但是空閒時間不是看電影,就是玩遊戲都沒有認真看技術方面的東西感覺很內疚,2019年一定要好好的研究端正態度,認真學習技術。 為什麼要三級快取 有時候Android應用中要獲取比較大的資料,比如說圖片流,短視訊流等,如果每次都從網路上

Android 圖片三級快取載入框架原理解析與程式碼實現

本文主要介紹三級快取的原理解析與實現方式。以前一直覺得三級快取圖片載入是一個很難理解的東西,但是自己看了一下午再試著寫了一遍之後感覺還是隻要沉下心思考還時很容易熟悉掌握的。 所謂三級快取:首先是記憶體-檔案(外存)-網路三級快取機制。 首先: 框架需要一個接入方法NGIm

Android 最簡單的三級聯動(地區)第三方實現

一  :  效果圖展示   二  因為用到是第三方庫,要匯入下面的依賴 1   compile 'liji.library.dev:citypickerview:1.1.0' 2  xml佈局: <RelativeLayout android:id="

IOS開發之非同步載入網路圖片並快取本地實現瀑布流(一)

</pre><pre name="code" class="objc"></pre><pre name="code" class="objc">在前面的一篇部落格中,我寫了一個瀑布流照片牆的程式,由於之前的程式載入的圖片是本

Android中三級快取實現原理及LruCache 原始碼分析

介紹 oom異常:大圖片導致 圖片的三級快取:記憶體、磁碟、網路 下面通過一張圖來了解下三級快取原理: 程式碼: public class Davince { //使用固定執行緒池優化 private static Exec

Android --- 簡單實現三級快取

三級快取:     1、網路快取 從網路獲取資源(非同步載入)     2、本地快取 從本地獲取資料(File儲存)     3、記憶體快取 從記憶體獲取資料(LruCache) 1、記憶體快取:LruCache   主要是用到了LruCache這

Android --- 簡單實現三級快取LruCache

  三級快取:     1、網路快取 從網路獲取資源     2、本地快取 從本地獲取資料     3、記憶體快取 從記憶體獲取資料   記憶體快取:主要是用到了LruCache這個類,這個類比較適合用來快取圖片,它會將強引用物件放在LineedHashMap中,當快取資料大小達到預定值的時候會將在該

簡單實現Android圖片三級快取機制

    使用者在使用我們的APP時,通常會重複瀏覽一些圖片,這時如果每一次瀏覽都需要通過網路獲取圖片,那麼將會非常流量。為了節省使用者流量,提高圖片載入效率,我們通常使用圖片三級快取策略,即通過網路、本地、記憶體三級快取圖片,來減少不必要的網路互動,避免浪費流量

安卓圖片三級快取策略與實現

前言: 這裡說的三級快取,分別指的是:記憶體快取、檔案快取和網路這三個層面。 一般來說,我們首次載入圖片,記憶體和檔案是沒有快取的,這樣我們需要從網路載入,載入完成後,我們會存到記憶體和檔案中去;當再次載入圖片的時候,我們會先查詢記憶體有沒有,如果有就直接顯示記憶體中的圖片

Picasso圖片下載快取的使用心得

Picasso的使用呢,是剛來公司沒多久的時候用到的,當時並沒有多大的自覺性將其記錄下來,促使我將它記錄下來的原因是,公司的女神姐姐想要用到圖片下載快取庫的時候,問我的時候,我發現我記得並不是特別的清楚,還翻了之前的程式碼看,才知道我之前寫了個什麼東西,為何用這個東西,它

[IOS]猿題網路json資料快取

使用JSON 資料快取的初衷 是提高使用者體驗,用資料快取代替loading動畫。 整個一個流程是  進入檢視控制器 載入快取—向伺服器傳送資料請求——更新資料  首先  pods 安裝猿題庫 或者從外部直接新增到工程 yrk是基於afnworking的一個封裝庫,也就是說

weex 實現仿ios 三級聯動地址選擇器

這裡要實現一個weex 的 一個自定義的三級聯動元件,這裡囉嗦一句為什麼使用 vue 去自定義,一般使用weex的情況下,native也是支援原生擴充套件的,而且相對 android 和ios 各種第三方的元件選擇很多不少還很成熟,為什麼不直接使用呢。 這

【簡單的留言本】用HTML新增的數據實現

 【簡單的留言本】用html新增的數據庫實現 【簡單的留言本】用HTML新增的數據庫實現使用數據庫實現的WEB留言本 var datatable = null; var db = openDatabase(‘Mydata‘,‘‘,‘My Database‘,1024

[objc]-ios 分頁控制器實現

width 單個 fse 初始 mil icontrol uilable action per 效果圖 如下 上方的滑條 根據頁面可以滑動 思路: 下方灰色的部分是一個scrollview 其中放置了2個view。 上方的綠色滑條是uilable控件。 綠色滑條下面

自己寫的php curl實現整站克隆

mod sta load dir extends end write star control 有時候常常會用到一些在線手冊,比方國內或國外的。有些是訪問速度慢,有些是作者直接吧站點關閉了,有些是server總是宕機。所以還是全盤克隆到自己server比較爽。所 已這裏

iOS重寫drawRect方法實現帶箭頭的View

hat oid line wid addition arrow memory alt ins 創建一個UIView的子類,重寫drawRect方法可以實現不規則形狀的View,這裏提供一個帶箭頭View的實現代碼: ArrowView.h #import <UIKi