一、編程中的六大設計原則?
1.單一職責原則
通俗地講就是一個類只做一件事
1.CALayer:動畫和視圖的顯示。
2.UIView:只負責事件傳遞、事件響應。
2.開閉原則
對修改關(guān)閉,對擴展開放。 要考慮到后續(xù)的擴展性,而不是在原有的基礎上來回修改
3.接口隔離原則
使用多個專門的協(xié)議、而不是一個龐大臃腫的協(xié)議,
例如tableView的代理和數(shù)據(jù)源代理:UITableviewDelegate
,UITableViewDataSource
4.依賴倒置原則
抽象不應該依賴于具體實現(xiàn)、具體實現(xiàn)可以依賴于抽象。 調(diào)用接口感覺不到內(nèi)部是如何操作的
5.里氏替換原則
父類可以被子類無縫替換,且原有的功能不受任何影響;例如 KVO
6.迪米特法則
一個對象應當對其他對象盡可能少的了解,實現(xiàn)高聚合、低耦合
二、如何設計一個圖片緩存框架?
可以模仿 SDWebImage 來實現(xiàn)。
構(gòu)成:
Manager
內(nèi)存緩存
磁盤緩存
網(wǎng)絡下載
Code Manager(圖片解碼,圖片解壓縮)
圖片的存儲是以圖片的單向 hash 值為 Key
內(nèi)存設計需要考慮的問題
存儲的 Size
因為內(nèi)存的空間有限,我們針對不同尺寸的圖片,給出不同的方案
10K 以下的 50 個
100Kb 以下的 20 個
100kb 以上的 10 個
淘汰的策略
內(nèi)存的淘汰策略 采取 LRU(最近最少使用算法)
觸發(fā)淘汰策略的時機有三種
1.定期檢查(不建議,耗性能)
2.提高檢查觸發(fā)頻率(一定要注意開銷)
(1).前后臺切換的時候
(2).每次讀寫的時候
磁盤設計需要考慮的問題
存儲方式
大小限制(有固定的大小)
移除策略(可以設置為 7 天或者 15 天)網(wǎng)絡設計需要考慮的問題
圖片請求的最大并發(fā)量 請求超時策略 請求優(yōu)先級
圖片解碼
應用 策略模式,針對 jpg、png、gif 等不同的圖片格式進行解碼
圖片解碼的時機
在子線程圖片剛下載完時,在子線程剛從磁盤讀取完時
避免在主線程解壓縮、解碼,避免卡頓
三、如何設計一個時長統(tǒng)計框架?
記錄器
頁面式記錄器
流式記錄器
自定義式記錄管理者
內(nèi)存記錄緩存
磁盤存儲
上傳器
如何降低數(shù)據(jù)的丟失率?
定期寫入磁盤
每當達到某個值的時候,就寫入磁盤
記錄上傳的時機
前后臺切換的時候可以上傳
從無網(wǎng)到有網(wǎng)切換的時候可以上傳
上傳時機的選擇
立即上傳
定時上傳
延時上傳