相同的代碼不要出現兩次web
相同功能的代碼能夠及時抽取,以備往後複用,不要重複建立輪子
緩存
明確每一步的目標
數據結構
小步走併發
測試(每個改動都有可能出現錯誤)函數
新建方法測試
複製代碼spa
根據代碼調整參數和返回值代理
調整調用位置代碼指針
測試code
示意圖
新建類
抽取主方法
在 .h
中定義方法接口,明確該方法是否適合被外部調用
在 .m
中增長方法實現
將主方法複製到新方法中
複製相關的子
方法
複製相關屬性
檢查代碼的有效性
調整內部變量,讓 NSURL
由調用方傳遞,保證代碼的靈活性
複製代理方法,
註釋更新 UI
部分的代碼
使用 #warning TODO
提醒本身此處有未完成的工做
這樣作能夠不影響重構的節奏
調整視圖控制器 測試
重構方法執行
調整視圖控制器代碼,刪除被移走代碼
再次測試,確保調整沒有失誤!
確認重構的接口
須要進度
回調
須要完成&錯誤
回調
定義類方法,傳遞迴調參數
實現類方法,記錄住回調 block
調整調用方法
增長 block
實現
測試
增長已經下載完成的回調
進度回調(100%)
完成回調(路徑)
斷言
暫停操做
測試,測試,測試!
新問題:若是連續點擊,會重複下載,形成錯亂!
解決辦法:創建一個下載管理器的單例,負責全部的文件下載,以及下載操做的緩存!
示意圖
創建單例
接管
下載操做
定義接口方法
實現方法
替換方法
測試
操做緩存
暫停實現
最大併發數,NSOperationQueue+NSOperation
block 是 C
語言的數據結構
是預先準備好的代碼,在須要時執行,相似於匿名函數指針
能夠被看成參數傳遞
在須要時,能夠對 block
進行擴展
若是當前方法不執行 block
,須要使用 屬性
記錄
block
屬性須要使用 copy
描述符
對於必須傳遞的 block
回調,能夠使用 斷言