1粤攒、斷點續(xù)傳
斷點續(xù)傳的原理:每次在向服務器請求下載數(shù)據(jù)的同時量没,要告訴服務器是從整個下載文件的數(shù)據(jù)流的某個位置開始下載丑罪,然后服務器就返回從那個位置開始的數(shù)據(jù)流芍耘。
//創(chuàng)建請求對象---關鍵點
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//設置請求頭信息佳谦,說明只需要請求該次源的一部分數(shù)據(jù)
/*
? ? bytes = 0-1000 表示下載0~1000的數(shù)據(jù)
? ? bytes = 0- ? ? 表示從0開始下載直到下載完畢
? ? bytes = 100- ? 表示從100開始下載直到下載完畢
*/
NSString *range = [NSString stringWithFormat:@"bytes=%zd-",self.currentSize];
[request setValue:range forHTTPHeaderField:@"Range”];
2戴涝、IOS緩存策略
緩存的本質是用空間換取時間
NSURLCache是iOS系統(tǒng)提供的內存以及磁盤的綜合緩存機制,NSURLCache對象被存儲沙盒中Library/cache目錄下钻蔑。
AFNetworking中AFImageDownloader使用AFAutoPurgingImageCache和NSURLCache管理圖片緩存啥刻。
3、UITableView載優(yōu)化
cell的復用:
cell的高度:提前計算高度
cell的渲染:渲染最好時的操作之一就是混合(blending)了,所以我們不要使用透明背景咪笑,將cell的opaque值設為Yes可帽,背景色不要使用clearColor,盡量不要使用陰影漸變等窗怒;減少subviews的個數(shù)和層級映跟;避免CALayer特效(shadowPath):不要給cell動態(tài)添加subView,在初始化cell的時候就將所有需要展示的添加完畢,然后根據(jù)需要來設置hide屬性顯示和隱藏扬虚。
異步化UI努隙,不要阻塞主線程.
滑動時按需加載對應的內容
4、網(wǎng)絡優(yōu)化
最小化應用使用的專有域名的數(shù)量
如果子域名數(shù)量上升至兩位數(shù)孔轴,我們需要仔細考慮這方面的優(yōu)化了
DNS預先下載
SSL握手時間
如果應用中所有連接均是通過 TLS/SSL 的(使用HTTPS)
最大程度減少應用發(fā)起的連接數(shù)剃法,也需要減少應用連接的獨有域名的數(shù)量
請求結束后不要關閉 HTTP/S 連接
為所有的 HTTP/S 的請求添加頭 Connection: keep-alive
如果適用,當網(wǎng)絡可用時,支持同步的離線存儲
5贷洲、IOS-Runtime
動態(tài)交換兩個方法的實現(xiàn)
動態(tài)添加方法
動態(tài)添加屬性
6收厨、IOS-Runloop
RunLoop是一個對象,這個對象在循環(huán)中用來處理程序運行過程中出現(xiàn)的各種事件(比如說觸摸事件优构、UI刷新事件诵叁、定時器事件、Selector事件)钦椭,從而保持程序的持續(xù)運行拧额;而且在沒有事件處理的時候,會進入睡眠模式彪腔,從而節(jié)省CPU資源侥锦,提高程序性能。
什么時候使用run loop
僅當在為你的程序創(chuàng)建輔助線程的時候德挣,你才需要顯式運行一個run loop恭垦。
對于輔助線程,你需要判斷一個run loop是否是必須的格嗅。如果是必須的番挺,那么你要自己配置并啟動它。你不需要在任何情況下都去啟動一個線程的run loop屯掖。
例如:使用端口或自定義輸入源來和其他線程通信玄柏;使用線程的定時器;Cocoa中使用任何performSelector…的方法贴铜;使線程周期性工作粪摘。
如果你決定在程序中使用run loop,那么它的配置和啟動都很簡單绍坝。和所有線程編程一樣赶熟,你需要計劃好在輔助線程退出線程的情形。讓線程自然退出往往比強制關閉它更好陷嘴。
7映砖、iOS熱更新實現(xiàn)方式
1、JSPatch:熱更新時灾挨,從服務器拉去js腳本邑退,理論上可以修改和新建所有的模塊,但是不建議這樣做劳澄,用來做緊急的小需求和 修復嚴重的線上bug地技。
2、lua腳本:從服務器拉去lua腳本秒拔,游戲開發(fā)經(jīng)常用到莫矗。
3、Weex:跨平臺,weex基于vue.js作谚,weex是阿里開源的技術三娩。
4、React Native:不像Weex能一套代碼多端運行妹懒,適配iOS和android需要自己分別做修改雀监。React Native和Weex都 可以進行熱更新,但都不能修改原生OC代碼眨唬。JSPatch会前、lua 配合React Native可以讓一個原生APP時刻處于可擴展可修改的狀態(tài)。
5匾竿、Hybrid:像PhoneGap之類的框架, 基本概念和web差不多, 通過更新js/html來實現(xiàn)動態(tài)化瓦宜,沒有原生的效果流暢。
6岭妖、rollout.io:Rollout緊急修復線上bug歉提。后端有相關的管理頁面,要翻墻才能使用区转。
7、DynamicCocoa:滴滴iOS的一個框架版扩,與JSPatch比更加智能化废离,用OC在XCode中寫完代碼,用工具可以自動生成可以更新的js文件礁芦。