一、內(nèi)存管理
1却紧、分析工具:
- 靜態(tài)分析法:Analyze。
- 動態(tài)分析法:Instrument工具庫里的Leaks钞艇。
2啄寡、原因分析:
目前,在ARC環(huán)境下哩照,導(dǎo)致內(nèi)存泄漏的根本原因是代碼中存在循環(huán)引用挺物,從而導(dǎo)致一些內(nèi)存無法釋放,最終導(dǎo)致dealloc()方法無法被調(diào)用飘弧。
主要原因大概有一下幾種類型:
- ViewController中存在NSTimer(理由:這時(shí) target: self识藤,增加了ViewController的retain count, 即self強(qiáng)引用timer次伶,timer強(qiáng)引用self痴昧。造成循環(huán)引用。解決方案:在恰當(dāng)時(shí)機(jī)調(diào)用[timer invalidate]即可冠王。)
- ViewController中的代理delegate(理由:如果代理用strong修飾赶撰,ViewController(self)會強(qiáng)引用View,View強(qiáng)引用delegate柱彻,delegate內(nèi)部強(qiáng)引用ViewController(self)豪娜,造成內(nèi)存泄漏。解決方案:代理盡量使用weak修飾哟楷。)
- ViewController中Block(如果block被當(dāng)前ViewController(self)持有瘤载,這時(shí),如果block內(nèi)部再持有ViewController(self)卖擅,就會造成循環(huán)引用鸣奔。解決方案:在block外部對弱化self,再在block內(nèi)部強(qiáng)化已經(jīng)弱化的weakSelf)
二惩阶、單例設(shè)計(jì)模式
1挎狸、優(yōu)點(diǎn):節(jié)省內(nèi)存開銷
2、系統(tǒng)自帶的單例模式:[UIApplication shareApplication]琳猫,[NSUserdefaults standardUserDefualts],[UIDevice currentDevice];
三伟叛、json/XML
XML優(yōu)缺點(diǎn):
- 優(yōu)點(diǎn):
1.格式統(tǒng)一,符合標(biāo)準(zhǔn)脐嫂。
2.容易與其他系統(tǒng)進(jìn)行遠(yuǎn)程交互统刮,數(shù)據(jù)共享比較方便 - 缺點(diǎn):
1.XML文件格式龐大紊遵,格式復(fù)雜,傳輸占用帶寬
2.服務(wù)器和客戶端都需要花費(fèi)大量代碼來解析XML侥蒙,不論服務(wù)器端還是客戶端都使代碼變得異常復(fù)雜和不容易維護(hù)暗膜。
3.客戶端不同瀏覽器之間解析XML的方式不一致,需要重復(fù)編寫很多代碼鞭衩。
4.服務(wù)器端和客戶端解析XML花費(fèi)資源和時(shí)間学搜。
JSON優(yōu)缺點(diǎn): - 優(yōu)點(diǎn):
1.數(shù)據(jù)格式比較簡單,易于讀寫论衍,格式都是壓縮的瑞佩,占用帶寬小。
2.這種語言易于解析坯台。
3.支持多種語言炬丸,包括ActionScript,C,C#,ColdFusion,Java,JavaScript,Perl,PHP,Python,Ruby等服務(wù)器端語言,便于服務(wù)器端解析蜒蕾。
4.因?yàn)镴SON格式能夠直接為服務(wù)器端代碼使用稠炬,大大簡化了服務(wù)器端和客戶端的代碼開發(fā)量,但是完成的任務(wù)不變咪啡,且易于維護(hù)首启。 - 缺點(diǎn)
1.沒有XML格式折這么推廣的深入人心和廣泛使用,沒有XML那么通用
2.JSON格式目前在Web Service中的推廣還屬于初級階段
四撤摸、數(shù)據(jù)存儲
內(nèi)存存儲和磁盤存儲毅桃,磁盤存儲又分為數(shù)據(jù)庫存儲和文件系統(tǒng)存儲。
內(nèi)存存儲:NSURLConnection准夷,NSCache疾嗅。
文件系統(tǒng)存儲:plist、NSUserDefaults冕象、keyChain存儲,NSKeyedArchiver
數(shù)據(jù)庫存儲:SQLite3汁蝶、FMDB
1渐扮、沙盒
如果程序中有需要長時(shí)間持久化的數(shù)據(jù),就選擇Documents掖棉,如果有體積大但是并不重要的數(shù)據(jù)墓律,就可以選擇交給Library,而臨時(shí)沒用的數(shù)據(jù)當(dāng)然是放到temp幔亥。至于Preference則可以用來保存一些設(shè)置類信息耻讽,后面會講到偏好設(shè)置的使用方法。
2帕棉、plist存儲
//寫入數(shù)據(jù)
[dict writeToFile:filePath atomically:YES];
//讀取數(shù)據(jù)
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:filePath];
3针肥、Preference偏好設(shè)置
偏好設(shè)置的使用非常方便快捷饼记,我們一般使用它來進(jìn)行一些設(shè)置的記錄,比如用戶名慰枕,開關(guān)是否打開等設(shè)置具则。 Preference是通過NSUserDefaults來使用的,是通過鍵值對的方式記錄設(shè)置具帮。
4博肋、NSKeyedArchiver歸檔 / NSKeyedUnarchiver解檔
5、SQLite3 需要熟悉sql語句蜂厅,應(yīng)用比較少匪凡,會用三方工具
6、FMDB
五掘猿、第三方框架原理
1病游、AFN:
答:
答:
AFNetworking是封裝的NSURLSession的網(wǎng)絡(luò)請求,由五個(gè)模塊組成:分別由NSURLSession,Security,Reachability,Serialization,UIKit五部分組成
NSURLSession:網(wǎng)絡(luò)通信模塊(核心模塊) 對應(yīng) AFNetworking中的 AFURLSessionManager和對HTTP協(xié)議進(jìn)行特化處理的AFHTTPSessionManager,AFHTTPSessionManager是繼承于AFURLSessionmanager的
Security:網(wǎng)絡(luò)通訊安全策略模塊 對應(yīng) AFSecurityPolicy
Reachability:網(wǎng)絡(luò)狀態(tài)監(jiān)聽模塊 對應(yīng)AFNetworkReachabilityManager
Seriaalization:網(wǎng)絡(luò)通信信息序列化术奖、反序列化模塊 對應(yīng) AFURLResponseSerialization
UIKit:對于iOS UIKit的擴(kuò)展庫
2礁遵、SDWebImage
答:
0、首先顯示占位圖
1采记、在webimagecache中尋找圖片對應(yīng)的緩存佣耐,它是以url為數(shù)據(jù)索引先在內(nèi)存中查找是否有緩存;
2唧龄、如果沒有緩存兼砖,就通過md5處理過的key來在磁盤中查找對應(yīng)的數(shù)據(jù),如果找到就會把磁盤中的數(shù)據(jù)加到內(nèi)存中既棺,并顯示出來讽挟;
3、如果內(nèi)存和磁盤中都沒有找到丸冕,就會向遠(yuǎn)程服務(wù)器發(fā)送請求耽梅,開始下載圖片;
4胖烛、下載完的圖片加入緩存中眼姐,并寫入到磁盤中;
5佩番、整個(gè)獲取圖片的過程是在子線程中進(jìn)行众旗,在主線程中顯示。