YTKNetworkConfig的功能使用方法讥脐?
1因悲、配置所有網(wǎng)絡請求的主機地址和CDN地址2厚者、與url過濾類一起來統(tǒng)一對所有的url進行更改 3、本質(zhì)是一個單例類促煮,所以直接實例化對象邮屁,設置對象的baseUrl和cdnUrl屬性
網(wǎng)絡請求類YTKRequest?
這相當于我們的BaseRequest菠齿,以后每一個網(wǎng)絡請求對象都將繼承于它佑吝,一個網(wǎng)絡請求一個對象。使用就是通過覆蓋父類的方法來建立特定的網(wǎng)絡請求對象绳匀,主要就是覆蓋requestUrl芋忿、requestMethod炸客、requestArgument等方法,需要特別注意的是因為詳細網(wǎng)址已經(jīng)設置在YTKNetworkConfig類的baseUrl屬性里戈钢,因此這里的requestUrl就不用再寫服務器的主機地址了痹仙。請求數(shù)據(jù)之前先判斷已有的JSON數(shù)據(jù)是否無效的屬性:jsonValidator檢查網(wǎng)絡請求到的JSON與已有的JSON是否一致:statusCodeValidator屬性如果我們要POST文件就需要用到屬性:constructingBodyBlock
什么叫支持文件的斷點續(xù)傳?
如何打破Block回調(diào)中的循環(huán)引用在block里直接用self殉了?
就是在網(wǎng)絡請求結(jié)束之后开仰,調(diào)用將Block置空的方法來防止循環(huán)引用,這樣就可以少些很多的typeof self weafSelf;使用方法宣渗?pod ‘YTKNetwork’抖所。將每一個網(wǎng)絡請求都封裝成對象,每一個請求都需要繼承YTKRequest類痕囱,通過覆蓋父類的一些方法來構(gòu)造制定的網(wǎng)絡請求田轧。就是在網(wǎng)絡請求結(jié)束之后,調(diào)用將Block置空的方法來防止循環(huán)引用鞍恢,這樣就可以少些很多的__weak typeof (self) weafSelf = self;
網(wǎng)絡封裝的適用場景傻粘?
1、需要緩存2帮掉、網(wǎng)絡請求之間存在依賴弦悉,即B網(wǎng)絡請求是否開始與A網(wǎng)絡請求的結(jié)果直接相關(guān)3、依賴特定的版本號來判斷緩存的內(nèi)容已過期4蟆炊、不僅可以實現(xiàn)Block回調(diào)稽莉,更是可以通過設置delegate屬性等于self,同時調(diào)用start方法進行委托回調(diào)涩搓。按時間緩存網(wǎng)絡請求內(nèi)容污秆?意思是說按一定的時間規(guī)律來進行緩存還是說超過了一定時間后已經(jīng)緩存的內(nèi)容失效,其實兩者并不矛盾昧甘,正是因為緩存的內(nèi)容在一段時間之后失效良拼,所以需要重新請求數(shù)據(jù),進行緩存充边。什么叫按版本號緩存網(wǎng)絡請求地址庸推?網(wǎng)絡請求中統(tǒng)一設置CDN地址,什么是CDN地址浇冰?全稱content delivery Network,內(nèi)容分發(fā)網(wǎng)絡贬媒。通過在網(wǎng)絡各處放置節(jié)點服務器實現(xiàn)在現(xiàn)有的服務器基礎(chǔ)上補充一層智能虛擬網(wǎng)絡,智能引導用戶到最近的服務器上肘习,是內(nèi)容傳輸?shù)母旒食恕⒏€(wěn)定。相互依賴的網(wǎng)絡請求的發(fā)送井厌?就是一個網(wǎng)絡請求的啟動開關(guān)取決于另一個網(wǎng)絡請求的請求結(jié)果蚓庭。
為什么要驗證JSON的合法性?
因為從服務器獲得的JSON數(shù)據(jù)不一定總是可信賴的仅仆,如果數(shù)據(jù)是從有故障的服務器返回了一個錯誤的格式器赞,就非常容易造成客戶端崩潰。就加入說正常情況下墓拜,我們登錄個人中心港柜,返回的昵稱總是字符串,用戶年齡都是數(shù)字咳榜,可是假如返回的文件格式出現(xiàn)問題夏醉,那么客戶端必崩無疑。所以驗證的方法就是重寫父類基礎(chǔ)網(wǎng)絡請求YTKRequest類的- (id)jsonValidator方法涌韩。返回的是一個字典畔柔,這個字典里面的鍵就是字符串形參,鍵值對的值就是【NSString class】臣樱。
在YTKNetworkConfig的對象里同時設置了baseUrl和cdnUrl屬性靶擦?
1、默認使用baseUrl2雇毫、如果想要使用cdnUrl玄捕,就必須重寫基礎(chǔ)網(wǎng)絡請求YTKRequest類的-(BOOL)useCDN方法并返回YES
實現(xiàn)斷點續(xù)傳下載?
重寫基礎(chǔ)網(wǎng)絡請求YTKRequest類的resumableDownloadPath方法棚放,直接返回一個文件路徑字符串枚粘。這里面就涉及到庫路徑Lib Path。
緩存路徑cachePath如何實現(xiàn)緩存數(shù)據(jù)的存绕恰馍迄?
首先就是通過重寫基礎(chǔ)網(wǎng)絡請求YTKRequest類的- (NSInteger的)cacheTimeInSeconds方法設定高速緩存數(shù)據(jù)的有效秒數(shù),如果緩存的數(shù)據(jù)沒有到期孝冒,在緩存期內(nèi)調(diào)用start方法或是startWithCompletionBlockWithSuccess方法時實際上并不會發(fā)送真正的請求柬姚,而是直接返回當初高速緩存的數(shù)據(jù),只有在緩存過期時庄涡,才會真正地發(fā)送網(wǎng)絡請求量承。
高級用法
批量編輯網(wǎng)絡請求路徑?
首先分析url參數(shù)過濾的類的實現(xiàn)原理穴店,其實本質(zhì)就是通過一個全新的自定義類來整合基礎(chǔ)的url和新增的參數(shù)字典撕捍,然后介紹url參數(shù)過濾的類的使用方法。1泣洞、新建一個url參數(shù)過濾的類忧风,這個類的.h方法里面有一個協(xié)議,協(xié)議里面主要實現(xiàn)了兩個方法球凰,第一個方法輸入?yún)?shù)是一個字典狮腿,返回一個自定義類的對象腿宰;第二個方法就是輸入?yún)?shù)一為原始url的字符串,參數(shù)二為基礎(chǔ)網(wǎng)絡請求類的對象缘厢,返回參數(shù)是一個全新的url字符串吃度。2、.m方法里面首先包括一個名為參數(shù)arguments的全局變量字典贴硫。前面說過返回的參數(shù)為url參數(shù)過濾的類的對象本身椿每,恰好這個url參數(shù)過濾的類的對象的初始化就需要傳入argument字典。讓我奇怪的是為什么是url參數(shù)過濾的類生成類時的self對象來調(diào)用alloc來開辟內(nèi)存空間英遭。而且又返回一個url參數(shù)過濾的類的對象间护,好奇怪。3挖诸、在輸入原始url和增加的request兩個參數(shù)之后返回一個全新的url字符串汁尺。這里面務必注意這里是通過網(wǎng)絡請求私有類來調(diào)用一個方法拼接原始的url和新增的參數(shù)字典,最后返回一個字符串多律,反而當初傳進來的request網(wǎng)絡請求類對象并沒有使用均函。
舉例現(xiàn)在要把客戶端的版本號添加到所有的網(wǎng)絡請求url之中?
其實就是在設置根控制器為可見的方法里使用兩個類來實現(xiàn)網(wǎng)絡參數(shù)的統(tǒng)一添加菱涤,所有的url都變成全新的url苞也,當務之急還是先通過url參數(shù)過濾的類調(diào)用類方法傳入?yún)?shù)實例化一個url參數(shù)過濾的類的對象。然后再通過網(wǎng)絡配置這個單例類對象調(diào)用添加url參數(shù)過濾的類的對象的方法粘秆,其目的就是將添加后的參數(shù)推廣到所有網(wǎng)絡請求url如迟。
同一時間發(fā)送批量的網(wǎng)絡請求并統(tǒng)一處理同時請求成功時的回調(diào)?
1攻走、實例化4個Api對象2殷勘、把這4個對象以數(shù)組的元素的形式傳入初始化YTKBatchRequest對象的數(shù)組形參里3、YTKBatchRequest對象調(diào)用startWithCompletionBlockWithSuccess方法4昔搂、在4個Api對象全部請求成功的Block回調(diào)里實例化一個臨時數(shù)組并賦值為YTKBatchRequest對象的requestArray屬性5玲销、再各自使用4個Api類實例四個Api對象,一一對應requestArray的每一個元素摘符,但然需要強轉(zhuǎn)6贤斜、現(xiàn)在就跟一個Api請求成功獲得的request沒有什么區(qū)別了。
加載緩存數(shù)據(jù)的高級用法逛裤?
由于加載慢瘩绒,所以先調(diào)用方法[api cacheJson]顯示上次緩存的內(nèi)容,加載成功后带族,再用最新的內(nèi)容替換上次的內(nèi)容锁荔,如是斷網(wǎng)狀態(tài)也先顯示上次緩存中的內(nèi)容。當初不是還需要Api先來判斷緩存的數(shù)據(jù)是否在有效時間內(nèi)蝙砌,然后再決定是否是真的請求數(shù)據(jù)阳堕。而現(xiàn)在就是直接調(diào)用- (id)cacheJson方法獲得上次緩存的內(nèi)容跋理。前提必須重寫父類設定緩存有效時間的方法- (NSInteger)cacheTimeInSeconds返回一個大于0的值,這樣才能開啟基礎(chǔ)網(wǎng)絡請求類的緩存功能恬总。因為默認情況下緩存數(shù)據(jù)的有效時間為0秒薪介。
上傳文件獲得一個訪問文件的Api?
關(guān)鍵就是重寫基礎(chǔ)網(wǎng)絡請求類的- (AFConstructingBlock)constructingBodyBlock方法越驻,在這個方法里直return一個Block代碼塊,返回參數(shù)為void直接忽略沒寫道偷,輸入?yún)?shù)為一個滿足協(xié)議的formData值缀旁,數(shù)據(jù)類型自然不確定是id啦。這就相當于直接return一個NSString *tempString = @“”勺鸦,只不過這里的tempString是一個^(idformData)輸入?yún)?shù)為fromData的Block,而且這個地方直接給Block賦值了并巍,真的是既聲明又賦值。賦值的代碼里面首先就是壓縮圖片成NSData數(shù)據(jù)换途。最后通過formData調(diào)用appendPartWithFileData方法正式上傳圖片懊渡。尤其注意這里需要傳入三個參數(shù),其一是文件的二進制數(shù)據(jù)军拟,其二是文件名字剃执,其三是文件夾的名字,其四很關(guān)鍵懈息,需要傳入文件類型肾档,圖片通常都是image/jpeg。另外文件名字和文件夾的名字可以相同辫继,而且通常來說就是image怒见。
統(tǒng)一設置網(wǎng)絡請求Api的請求頭HeaderField?
重寫覆蓋基礎(chǔ)網(wǎng)絡請求類的-(NSDictionnary*)requestHeaderFieldValueDictionary方法返回一個請求頭的鍵值對的字典姑宽。務必注意遣耍,請求頭字典的鍵和值都必須是NSString類型。
定制自定義的網(wǎng)絡請求類對象炮车?
重寫最最基礎(chǔ)網(wǎng)絡請求YTKBaseRequest類的- (NSURLRequest *)buildCustomUrlRequest
方法舵变,返回一個基礎(chǔ)網(wǎng)絡請求類的對象。尤其注意的是瘦穆,只要返回的基礎(chǔ)網(wǎng)絡請求類的對象非nil不為空棋傍,那么會忽略其它一切自定義request的方法。
按時間緩存網(wǎng)絡請求內(nèi)容难审?
意思是說按一定的時間規(guī)律來進行緩存還是說超過了一定時間后已經(jīng)緩存的內(nèi)容失效瘫拣,其實兩者并不矛盾,正是因為緩存的內(nèi)容在一段時間之后失效告喊,所以需要重新請求數(shù)據(jù)麸拄,進行緩存派昧。
按版本號緩存網(wǎng)絡請求地址?
網(wǎng)絡請求中統(tǒng)一設置CDN地址拢切,什么是CDN地址蒂萎?
全稱content delivery Network,內(nèi)容分發(fā)網(wǎng)絡。通過在網(wǎng)絡各處放置節(jié)點服務器實現(xiàn)在現(xiàn)有的服務器基礎(chǔ)上補充一層智能虛擬網(wǎng)絡淮椰,智能引導用戶到最近的服務器上五慈,是內(nèi)容傳輸?shù)母臁⒏€(wěn)定主穗。
相互依賴的網(wǎng)絡請求的發(fā)送泻拦?
就是一個網(wǎng)絡請求的啟動開關(guān)取決于另一個網(wǎng)絡請求的請求結(jié)果。
一次性對所有的網(wǎng)絡請求路徑進行更改忽媒?
首先分析url參數(shù)過濾的類的實現(xiàn)原理争拐,其實本質(zhì)就是通過一個全新的自定義類來整合基礎(chǔ)的url和新增的參數(shù)字典,然后介紹url參數(shù)過濾的類的使用方法晦雨。
1架曹、新建一個url參數(shù)過濾的類,這個類的.h方法里面有一個協(xié)議闹瞧,協(xié)議里面主要實現(xiàn)了兩個方法绑雄,第一個方法輸入?yún)?shù)是一個字典,返回一個自定義類的對象奥邮;第二個方法就是輸入?yún)?shù)一為原始url的字符串绳慎,參數(shù)二為基礎(chǔ)網(wǎng)絡請求類的對象,返回參數(shù)是一個全新的url字符串漠烧。
2杏愤、.m方法里面首先包括一個名為參數(shù)arguments的全局變量字典。前面說過返回的參數(shù)為url參數(shù)過濾的類的對象本身已脓,恰好這個url參數(shù)過濾的類的對象的初始化就需要傳入argument字典珊楼。讓我奇怪的是為什么是url參數(shù)過濾的類生成類時的self對象來調(diào)用alloc來開辟內(nèi)存空間。而且又返回一個url參數(shù)過濾的類的對象度液,好奇怪厕宗。
3、在輸入原始url和增加的request兩個參數(shù)之后返回一個全新的url字符串堕担。這里面務必注意這里是通過網(wǎng)絡請求私有類來調(diào)用一個方法拼接原始的url和新增的參數(shù)字典已慢,最后返回一個字符串,反而當初傳進來的request網(wǎng)絡請求類對象并沒有使用霹购。