網(wǎng)路階段#
應用程序如何連接互聯(lián)網(wǎng)##
- 基于HTTP協(xié)議
- HTTP: 超文本傳輸協(xié)議(Hyper - Text Markup Language),基于字符的無狀態(tài)協(xié)議鸡岗。有請求和響應兩種格式,HTTP是基于TCP的沼死,這就意味著他是一個可靠的通信協(xié)議锡移。
TCP/IP模型是Internet的基石呕童,是一個分層模型,從下往上依次是物理鏈路層淆珊、網(wǎng)絡層(IP夺饲,尋址和路由)、傳輸層(TCP/UDP,前者是可靠通信協(xié)議往声,后者是不可靠通信協(xié)議)和應用層(HTTP/FTP/POP3/SMTP/Telent)擂找。
- 相關API:
- NSURL:統(tǒng)一資源定位符,協(xié)議://域名或者IP地址:端口號/路徑/資源
- NSURLRequest / NSMutableURLRequest:HTTP請求(應用對服務器的請求)
- NSURLResponse:HTTP響應(服務器給應用的響應)
- NSURLConnection:iOS 7以前的聯(lián)網(wǎng)方式浩销,主要有兩個類方法贯涎,一個用于發(fā)送同步請求(阻塞式請求),一個用于發(fā)送異步請求(非阻塞式請求)
- NSURLSession:通過該對象可以創(chuàng)建三種任務:上傳(NSURLSessionUploadTask)慢洋、下載(NSURLSessionDownloadTask)塘雳、獲取數(shù)據(jù)(NSURLSessionDataTask)。任務可以執(zhí)行(resume)普筹、掛起(suspend)败明、取消(cancel)
- NSURLSessionConfiguration:保存所有的聯(lián)網(wǎng)設置
iOS 9出于安全方面的考慮,不允許使用非安全的HTTP協(xié)議聯(lián)網(wǎng)斑芜,需要修改項目的Info.plist文件設置允許非安全的HTTP連接。
- 數(shù)據(jù)解析:
- JSON:NSJSONSerialization可以將服務器響應的二進制式的JSON數(shù)據(jù)轉(zhuǎn)換成數(shù)組或字典祟霍,接下來可以講字典或數(shù)組轉(zhuǎn)換成模型對象杏头,可以使用的方式包括:KVC、JSONModel沸呐、JSONKit醇王、MJExtension、YYModel(推薦使用)
- XML:SAX解析(順序的崭添,事件驅(qū)動式的解析寓娩,省空間)和DOM解析(文檔對象模型,方便查找(XPath/XQuery))呼渣。第三方庫提供的解析基本上是DOM解析棘伴,比較常用的有:GDataXML、KissXML屁置、RaptureXML
- 第三方庫AFNetworking的使用:
- AFHTTPSessionManager
- AFURLSessionManager
注意:AFNetworking默認是只支持JSON格式的相應數(shù)據(jù)焊夸,需要對AFHTTPResponseSerializer進行設置來支持更多的MIME類型。
- 基于套接字(Socket)
- 點到點通信
- 和服務器通信
- 套接字是一套聯(lián)網(wǎng)的API蓝角,是由一系列C語言構成的阱穗,有三類套接字,流套接字(基于TCP協(xié)議)使鹅、數(shù)據(jù)報套接字(基于UDP)揪阶、原始套接字(基于IP協(xié)議)
地圖和定位##
- 蘋果原生地圖(國內(nèi)使用高德數(shù)據(jù))、高德地圖患朱、百度地圖鲁僚。
- 定位:如果使用CLLocationManager實現(xiàn)定位服務,通過GPS設備獲得的坐標是地球坐標,在國內(nèi)使用時需要轉(zhuǎn)換成火星坐標蕴茴。高德地圖和百度地圖都不直接使用蘋果原生的CLLocationManager實現(xiàn)定位劝评,而是對其做了二次封裝,提供了自己的定位服務的API倦淀,通過高德地圖或百度地圖定位服務獲得的坐標已經(jīng)是修正后的火星坐標或百度坐標蒋畜,就不需要通過代碼進行坐標轉(zhuǎn)換。iOS 8開始如果要使用定位服務撞叽,必須用戶授權姻成,因此需要修改Info.plist文件,設置一直開啟或使用時開啟定位服務的選項愿棋。
- 在地圖上添加圖形覆蓋物和標注
- POI收索功能
- 街景地圖科展,室內(nèi)地圖
- 計算距離:球面坐標轉(zhuǎn)換成平面坐標(墨卡托坐標)
多線程地圖##
- 概念:進程,線程糠雨,串行才睹,并行,同步甘邀,異步
- 五種實現(xiàn)方案:
- pthreads
- NSObject擴展:performSelectorOnMainThread / performSelectorInBackground
- NSThread
- NSOperationQueue / NSOperation (NSInvocationOperation / NSBlockOperation)
- GCD的使用場景:
dispatch_async(dispatch_get_global_queue(0,0), ^{ // 執(zhí)行耗時操作 dispatch_async(dispatch_get_main_queue(), ^{ // 刷新界面 }); });
##嵌入式數(shù)據(jù)庫##
- 實現(xiàn)持久化操作琅攘,有效地管理數(shù)據(jù)。
- SQLite松邪,關系型數(shù)據(jù)庫坞琴,用二維表組織數(shù)據(jù),支持SQL逗抑。
- DDL:create剧辐、drop、alter
- DML:insert邮府、delete荧关、update
- DQL: select
- 投影、別名褂傀、篩選羞酗、去重、排序紊服、分組檀轨、聚合函數(shù)、子查詢欺嗤、連接查詢
- ER圖(實體關系圖):實體和實體之間有三種關系参萄,分別是一對一、一對多煎饼、多對多讹挎。
- 設計表:范式理論、1NF、2NF筒溃、3NF马篮、BCNF、4NF怜奖。
- 應用程序中需要將數(shù)據(jù)庫放在沙箱的Documents路徑下浑测。
- 第三方庫FMDB
- FMDatabase:executeQuery / executeUpdate
- FMResultSet:可以從行中取出指定的列
>提示:如果在SQL語句中有占位符,那么替換占位符的必須是對象不能是基本類型歪玲,否者程序會崩潰迁央。
- 設計專門的持久層
- DAO模式:Data Access Object,封裝增刪改查(CRUD)的編程接口滥崩,以對象以單位來組織數(shù)據(jù)岖圈。