客戶端開發(fā)的本質(zhì)就是從展示到存取數(shù)據(jù)再到展示的一個(gè)交互過程臀晃。
以登錄為例:
- 用戶輸入賬號(hào)(取數(shù)據(jù))
- 點(diǎn)擊登錄后澜共,上傳數(shù)據(jù)到服務(wù)端(期間各種校驗(yàn))
- 服務(wù)端返回?cái)?shù)據(jù)(根據(jù)賬號(hào)返回登錄的情況)
- 解析數(shù)據(jù)
- 客戶端根據(jù)解析出的數(shù)據(jù)做出相應(yīng)(如登錄成功存儲(chǔ)用戶數(shù)據(jù)并跳轉(zhuǎn)到首頁(yè),登錄失敗則提示失敗原因)
從中可以清晰的想象出多個(gè)展示和交互的操作,接下去就看看如果要開發(fā)一個(gè)項(xiàng)目必不可少的功能和對(duì)應(yīng)的框架介紹。
網(wǎng)絡(luò)
- ASIHTTPRequest
- AFNetworking
ASIHTTPRequest框架是最早設(shè)計(jì)的框架,它的功能強(qiáng)大但是不支持ARC进泼,并且已經(jīng)停止更新
AFNetworking輕量、易用、使用者多缘琅、開發(fā)者有在積極維護(hù)粘都,支持block,是目前最優(yōu)秀的一個(gè)了
NSURL *URL = [NSURL URLWithString:@""];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:URL.absoluteString parameters:nil success:^(NSURLSessionTask *task, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(NSURLSessionTask *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
數(shù)據(jù)解析
作為一種輕量級(jí)的數(shù)據(jù)交換格式刷袍,json正在逐步取代xml翩隧,成為網(wǎng)絡(luò)數(shù)據(jù)的通用格式。
出現(xiàn)過的解析框架有很多:TouchJson呻纹、 SBJson 堆生、JSONKit等,但從IOS5開始雷酪,APPLE提供了對(duì)json的原生支持(NSJSONSerialization)淑仆,對(duì)于六種解析速度做了測(cè)試,分析如下:
無疑NSJSONSerialization最快哥力,目前來說蔗怠,大部分iOS項(xiàng)目都基于7.0以上,因此應(yīng)直接選擇系統(tǒng)自帶的NSJSONSerialization進(jìn)行解析吩跋。
NSString *jsonString = [NSString stringWithString:json];
NSData *jasonData = [[NSData alloc] initWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:jasonData options:NSJSONReadingMutableLeaves error:nil];
圖片緩存
使用第三方框架SDWebImage(非常優(yōu)秀)
處理網(wǎng)絡(luò)圖片緩存步驟:
- 根據(jù)圖片URL查找內(nèi)存是否有這張圖片寞射,有則返回圖片,沒有則進(jìn)入第二步
- 查找物理存儲(chǔ)是否有這張圖片锌钮,有則返回圖片桥温,沒有則進(jìn)入第三步
- 從網(wǎng)絡(luò)上下載該圖片,下載完后保存到內(nèi)存和物理存儲(chǔ)上梁丘,并返回該圖片
特點(diǎn) : 依賴的庫(kù)很少.功能全面侵浸。自動(dòng)實(shí)現(xiàn)磁盤緩存:緩存圖片名字是以MD5進(jìn)行加密的后的名字進(jìn)行命名.(因?yàn)榧用苣嵌炎执俏ㄒ坏?
[imageViewsd_setImageWithURL:v.fullImageURL placeholderImage:[UIImage imageNamed:@”xxxxx”]].
就一個(gè)方法就實(shí)現(xiàn)了多線程/帶緩沖等效果.(可用帶參數(shù)的方法,具體可看頭文件)
注意:
因?yàn)閁RL包含特殊字符和長(zhǎng)度不確定,要對(duì)URL進(jìn)行MD5處理或其他處理
如果圖片改變但圖片url沒有改變氛谜,會(huì)導(dǎo)致本地不去更新
數(shù)據(jù)持久化
所謂的持久化掏觉,就是將數(shù)據(jù)保存到硬盤中,使得在應(yīng)用程序或機(jī)器重啟后可以繼續(xù)訪問之前保存的數(shù)據(jù)值漫。在iOS開發(fā)中履腋,有很多數(shù)據(jù)持久化的方案,接下來我將嘗試著介紹一下5種方案:
- plist文件:將某些特定的類惭嚣,通過XML文件的方式保存在目錄中。
- 存儲(chǔ)時(shí)使用writeToFile: atomically:方法悔政。 其中atomically表示是否需要先寫入一個(gè)輔助文件晚吞,再把輔助文件拷貝到目標(biāo)文件地址。這是更安全的寫入文件方法谋国,一般都寫YES槽地。
- 讀取時(shí)使用arrayWithContentsOfFile:方法。
- preference:存儲(chǔ)偏好設(shè)置
- 偏好設(shè)置是專門用來保存應(yīng)用程序的配置信息的,一般不要在偏好設(shè)置中保存其他數(shù)據(jù)捌蚊。
- 如果沒有調(diào)用synchronize方法集畅,系統(tǒng)會(huì)根據(jù)I/O情況不定時(shí)刻地保存到文件中。所以如果需要立即寫入文件的就必須調(diào)用synchronize方法缅糟。
- 偏好設(shè)置會(huì)將所有數(shù)據(jù)保存到同一個(gè)文件中挺智。即preference目錄下的一個(gè)以此應(yīng)用包名來命名的plist文件。
- NSKeyedArchiver:歸檔
- SQLite 3
- CoreData
本質(zhì)上來說窗宦,Core Data使用的就是SQLite赦颇,但是通過一系列特性避免了使用SQL的一些列的麻煩,不僅如此赴涵,他還能夠合理管理內(nèi)存