iOS晉級知識匯總(六)框架和架構

怎樣設計一個圖片緩存框架(基本框架)

  • Manager
  • 內存緩存
  • 磁盤緩存
  • 網(wǎng)絡下載
  • CodeManager
    • 圖片解碼
    • 圖片壓縮/解壓縮
圖片緩存框架.png

圖片通過什么方式進行讀寫黍少,過程是怎么樣額寡夹?

  • 以圖片URL的單向Hash值作為key 來存儲到存儲框架中
    • 為什么要使用內存為了提高系統(tǒng)的查找效率所以才要設置多級緩存,節(jié)省流量


      圖片緩存的過程.png

內存的設計上需要考慮哪些問題

  • 存儲size
    • 隊列方式存儲圖片厂置,先進先出
    • 根據(jù)使用情況存儲10kb以下的 50個菩掏,100kb以下的20個,100kb以上的10個


      根據(jù)使用情況來設置size的大小.png
  • 淘汰策略
    • 先進先出的淘汰策略
    • LRU 最近最久未使用算法昵济, 如果30分鐘是否使用過
      • 定時檢查智绸,優(yōu)化:每次進行讀寫的時,前后臺切換也可以去檢查
    • 通過緩存大小清除

磁盤設計

  • 存儲方式的選擇
  • 大小限制(如100MB)
  • 淘汰策略(距今超過7天)

網(wǎng)絡設計

  • 圖片請求最大并發(fā)量
  • 請求超時策略
    • 重試機制
    • 請求優(yōu)先級

圖片解碼

不同格式的圖片访忿,解碼采用什么方式來做瞧栗?

  • 應用策略模式對不同圖片格式進行解碼

  • 在哪個階段做圖片解碼處理?

磁盤讀取之后網(wǎng)絡請求后進行圖片解碼海铆。

圖片緩存過程迹恐?

圖片緩存工作流程線程交互.png

怎么設計一個時長統(tǒng)計框架?

  • 記錄管理者
    • 記錄緩存模塊
      • 內存緩存在程序崩潰的時候懟是怎么辦卧斟,
      • 磁盤來處理異常場景
      • 上傳器 本地時長數(shù)據(jù)上傳給server
    • 流式
  • 記錄器 (記錄的數(shù)據(jù)交給記錄管理者進行管理)
    • 頁面式記錄器 用戶訪問一個頁面的時長
    • 流式記錄器 訪問新聞閱讀時長記錄
    • 自定義記錄器 橫條新聞播放有業(yè)務方控制
閱讀時長統(tǒng)計.png

為何要有不同類型的記錄器殴边,你的考慮是什么憎茂?

  • 基于不同分類場景提供的關于記錄的封裝、適配

記錄的緩存*存儲

記錄的數(shù)據(jù)由于某些原因丟失锤岸,你怎么處理竖幔?

  • 定時寫磁盤,每次滿足多少條就存儲磁盤

關于延時上傳的具體場景有哪些能耻?

  • 每滿多少條上傳
  • 前后臺切換
  • 無網(wǎng)到有網(wǎng)的變化

上傳時機是怎么樣把控的赏枚?

  • 立即上傳
  • 延遲上傳
  • 定時上傳

復雜頁面架構總結

MVVM框架思想

  • View對MVVM有一個強引用亡驰,ViewModel作為view的成員變量晓猛,ViewModel可以通過block形式把輸出結果回傳給使用方,或者是RAC響應式編程方來把對應的輸出回傳給這個視圖
    • View包含ViewController
  • ViewModel對model有一個強引用凡辱,或者是成員變量戒职,model可以用block或者代理會傳給Viewmodel
MVVM架構圖.png

ReactNative的數(shù)據(jù)流思想

首先會反向回到根節(jié)點,通過自頂向下遍歷查找對應打了臟標記的節(jié)點透乾,然后去更新對應的視圖
任何一個子孫節(jié)點是沒法做自己的變化更新的洪燥。他必須把這個變化消息傳遞給根節(jié)點, 根節(jié)點自頂向下的順序去遍歷子孫節(jié)點乳乌,
從主動行為編程被動行為捧韵。

RN數(shù)據(jù)流思想.png

系統(tǒng)UIView更新機制的思想

微博正文頁,反向更新機制汉操,實際上就是模擬了系統(tǒng)的UIView更新機制的思想再来,
UIView更新機制,就是UIView的繪制流程磷瘤,調用UIView的setneedsplay只是給對應視圖打了一個臟標記芒篷,而它真正繪制的時候是在RunLoop將要結束時才進行的實際繪制。view通過反向查找到對應的ViewModel然后變更對應的業(yè)務數(shù)據(jù)采缚,打臟標記针炉,然后在下次reload之前去反向更新從新走一遍RN的數(shù)據(jù)流來驅動UI的變化,借鑒了系統(tǒng)UIView更新機制的思想

或者是借鑒了AsyncDisplayKit的預排版思想

FaceBook的開源框架AsyncDisplayKit關于預排版的設計思想

預排版扳抽,也是解決了性能方面的問題篡帕,也是性能優(yōu)化的一種

客戶端整體架構面試問題

如何自己設計客戶端的整體架構

  • 獨立于App的通用層
    • 時長統(tǒng)計、崩潰統(tǒng)計贸呢、網(wǎng)絡的第三方庫
  • 通用的業(yè)務層
    • 自定義的當下公司業(yè)務相關的控件
  • 中間層 協(xié)調解耦
  • 業(yè)務A镰烧、業(yè)務B、業(yè)務C贮尉、業(yè)務D 中間層就是為了解耦這些業(yè)務

完全單獨拿出來一個業(yè)務A就能直接運用

業(yè)務之間的解耦通信方式

  • OpenURL
  • 依賴注入方式

依賴注入

業(yè)務A需要使用業(yè)務C的一些某些模塊伴嗡,業(yè)務C虱咧、業(yè)務A不產(chǎn)生依賴就可以解耦,那么可以使用中間層抓歼,業(yè)務A通過中間層獲取業(yè)務C的方法和成員變量
iOS使用的時候, 讓某一個業(yè)務方注冊一個protocol晓淀,注冊到中間層當中,同時實現(xiàn)中間層的代理方法,來返回給中間層具體的一個實例對象
然后業(yè)務A在使用的時候坚芜,通過跟其他業(yè)務開發(fā)人員商量好的協(xié)議,再從中間層中通過某一個方法
獲取遵從某個協(xié)議的實例然后在業(yè)務A當中斜姥,把這個實例當作完全遵從這個協(xié)議的透明對象來使用鸿竖,這樣就接觸了業(yè)務A和業(yè)務C的耦合稱之為依賴注入

總結

圖片緩存設計

閱讀時長統(tǒng)計

時長統(tǒng)計數(shù)據(jù)丟失率

復雜頁面架構

客戶端整體架構

上層可以依賴下層 下層不能依賴上層

業(yè)務解耦
OpenUrl
依賴注入

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市铸敏,隨后出現(xiàn)的幾起案子缚忧,更是在濱河造成了極大的恐慌,老刑警劉巖杈笔,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闪水,死亡現(xiàn)場離奇詭異,居然都是意外死亡蒙具,警方通過查閱死者的電腦和手機球榆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來禁筏,“玉大人持钉,你說我怎么就攤上這事±槲簦” “怎么了每强?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長旱爆。 經(jīng)常有香客問我舀射,道長,這世上最難降的妖魔是什么怀伦? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任脆烟,我火速辦了婚禮,結果婚禮上房待,老公的妹妹穿的比我還像新娘邢羔。我一直安慰自己,他們只是感情好桑孩,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布拜鹤。 她就那樣靜靜地躺著,像睡著了一般流椒。 火紅的嫁衣襯著肌膚如雪敏簿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音惯裕,去河邊找鬼温数。 笑死,一個胖子當著我的面吹牛蜻势,可吹牛的內容都是我干的撑刺。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼握玛,長吁一口氣:“原來是場噩夢啊……” “哼够傍!你這毒婦竟也來了?” 一聲冷哼從身側響起挠铲,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤冕屯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后市殷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體愕撰,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年醋寝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片带迟。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡音羞,死狀恐怖,靈堂內的尸體忽然破棺而出仓犬,到底是詐尸還是另有隱情嗅绰,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布搀继,位于F島的核電站窘面,受9級特大地震影響,放射性物質發(fā)生泄漏叽躯。R本人自食惡果不足惜财边,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望点骑。 院中可真熱鬧酣难,春花似錦、人聲如沸黑滴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袁辈。三九已至菜谣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背尾膊。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工甘磨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人眯停。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓济舆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親莺债。 傳聞我的和親對象是個殘疾皇子滋觉,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容

  • 注意:本文主講架構框架相關面試問題,包括圖片緩存齐邦、閱讀時長統(tǒng)計椎侠、復雜頁面結構、客戶端整體架構措拇。 問題: 架構框架解...
    codeTao閱讀 155評論 0 1
  • 圖片緩存 怎樣設計一個圖片緩存框架 圖片管理者模塊:內存緩存模塊我纪、磁盤緩存模塊、網(wǎng)絡圖片下載模塊 圖片處理:圖片解...
    叔簡閱讀 370評論 0 5
  • 1.網(wǎng)絡 1.網(wǎng)絡七層協(xié)議有哪些丐吓? 物理層:主要功能:傳輸比特流浅悉;典型設備:集線器、中繼器券犁;典型協(xié)議標準和應用:V...
    _我和你一樣閱讀 3,371評論 1 38
  • UItableview相關 重用機制 通過下面方法得到cell: 一般在iOS中术健,tableview的重用機制,我...
    struggle3g閱讀 14評論 0 0
  • 客戶端整體架構 1 獨立于App的通用層(時長統(tǒng)計 網(wǎng)絡請求 )2 通用業(yè)務層(本公司通用的組件等)3 中間層(用...
    紅燒大雞腿閱讀 1,497評論 1 0