YTKNetworkConfig的功能使用方法?
1、配置所有網絡請求的主機地址和CDN地址2、與url過濾類一起來統一對所有的url進行更改 3、本質是一個單例類,所以直接實例化對象,設置對象的baseUrl和cdnUrl屬性
網絡請求類YTKRequest?
這相當于我們的BaseRequest,以后每一個網絡請求對象都將繼承于它,一個網絡請求一個對象。使用就是通過覆蓋父類的方法來建立特定的網絡請求對象,主要就是覆蓋requestUrl、requestMethod、requestArgument等方法,需要特別注意的是因為詳細網址已經設置在YTKNetworkConfig類的baseUrl屬性里,因此這里的requestUrl就不用再寫服務器的主機地址了。請求數據之前先判斷已有的JSON數據是否無效的屬性:jsonValidator檢查網絡請求到的JSON與已有的JSON是否一致:statusCodeValidator屬性如果我們要POST文件就需要用到屬性:constructingBodyBlock
什么叫支持文件的斷點續傳?
如何打破Block回調中的循環引用在block里直接用self?
就是在網絡請求結束之后,調用將Block置空的方法來防止循環引用,這樣就可以少些很多的typeof self weafSelf;使用方法?pod ‘YTKNetwork’。將每一個網絡請求都封裝成對象,每一個請求都需要繼承YTKRequest類,通過覆蓋父類的一些方法來構造制定的網絡請求。就是在網絡請求結束之后,調用將Block置空的方法來防止循環引用,這樣就可以少些很多的__weak typeof (self) weafSelf = self;
網絡封裝的適用場景?
1、需要緩存2、網絡請求之間存在依賴,即B網絡請求是否開始與A網絡請求的結果直接相關3、依賴特定的版本號來判斷緩存的內容已過期4、不僅可以實現Block回調,更是可以通過設置delegate屬性等于self,同時調用start方法進行委托回調。按時間緩存網絡請求內容?意思是說按一定的時間規律來進行緩存還是說超過了一定時間后已經緩存的內容失效,其實兩者并不矛盾,正是因為緩存的內容在一段時間之后失效,所以需要重新請求數據,進行緩存。什么叫按版本號緩存網絡請求地址?網絡請求中統一設置CDN地址,什么是CDN地址?全稱content delivery Network,內容分發網絡。通過在網絡各處放置節點服務器實現在現有的服務器基礎上補充一層智能虛擬網絡,智能引導用戶到最近的服務器上,是內容傳輸的更快、更穩定。相互依賴的網絡請求的發送?就是一個網絡請求的啟動開關取決于另一個網絡請求的請求結果。
為什么要驗證JSON的合法性?
因為從服務器獲得的JSON數據不一定總是可信賴的,如果數據是從有故障的服務器返回了一個錯誤的格式,就非常容易造成客戶端崩潰。就加入說正常情況下,我們登錄個人中心,返回的昵稱總是字符串,用戶年齡都是數字,可是假如返回的文件格式出現問題,那么客戶端必崩無疑。所以驗證的方法就是重寫父類基礎網絡請求YTKRequest類的- (id)jsonValidator方法。返回的是一個字典,這個字典里面的鍵就是字符串形參,鍵值對的值就是【NSString class】。
在YTKNetworkConfig的對象里同時設置了baseUrl和cdnUrl屬性?
1、默認使用baseUrl2、如果想要使用cdnUrl,就必須重寫基礎網絡請求YTKRequest類的-(BOOL)useCDN方法并返回YES
實現斷點續傳下載?
重寫基礎網絡請求YTKRequest類的resumableDownloadPath方法,直接返回一個文件路徑字符串。這里面就涉及到庫路徑Lib Path。
緩存路徑cachePath如何實現緩存數據的存取?
首先就是通過重寫基礎網絡請求YTKRequest類的- (NSInteger的)cacheTimeInSeconds方法設定高速緩存數據的有效秒數,如果緩存的數據沒有到期,在緩存期內調用start方法或是startWithCompletionBlockWithSuccess方法時實際上并不會發送真正的請求,而是直接返回當初高速緩存的數據,只有在緩存過期時,才會真正地發送網絡請求。
高級用法
批量編輯網絡請求路徑?
首先分析url參數過濾的類的實現原理,其實本質就是通過一個全新的自定義類來整合基礎的url和新增的參數字典,然后介紹url參數過濾的類的使用方法。1、新建一個url參數過濾的類,這個類的.h方法里面有一個協議,協議里面主要實現了兩個方法,第一個方法輸入參數是一個字典,返回一個自定義類的對象;第二個方法就是輸入參數一為原始url的字符串,參數二為基礎網絡請求類的對象,返回參數是一個全新的url字符串。2、.m方法里面首先包括一個名為參數arguments的全局變量字典。前面說過返回的參數為url參數過濾的類的對象本身,恰好這個url參數過濾的類的對象的初始化就需要傳入argument字典。讓我奇怪的是為什么是url參數過濾的類生成類時的self對象來調用alloc來開辟內存空間。而且又返回一個url參數過濾的類的對象,好奇怪。3、在輸入原始url和增加的request兩個參數之后返回一個全新的url字符串。這里面務必注意這里是通過網絡請求私有類來調用一個方法拼接原始的url和新增的參數字典,最后返回一個字符串,反而當初傳進來的request網絡請求類對象并沒有使用。
舉例現在要把客戶端的版本號添加到所有的網絡請求url之中?
其實就是在設置根控制器為可見的方法里使用兩個類來實現網絡參數的統一添加,所有的url都變成全新的url,當務之急還是先通過url參數過濾的類調用類方法傳入參數實例化一個url參數過濾的類的對象。然后再通過網絡配置這個單例類對象調用添加url參數過濾的類的對象的方法,其目的就是將添加后的參數推廣到所有網絡請求url。
同一時間發送批量的網絡請求并統一處理同時請求成功時的回調?
1、實例化4個Api對象2、把這4個對象以數組的元素的形式傳入初始化YTKBatchRequest對象的數組形參里3、YTKBatchRequest對象調用startWithCompletionBlockWithSuccess方法4、在4個Api對象全部請求成功的Block回調里實例化一個臨時數組并賦值為YTKBatchRequest對象的requestArray屬性5、再各自使用4個Api類實例四個Api對象,一一對應requestArray的每一個元素,但然需要強轉6、現在就跟一個Api請求成功獲得的request沒有什么區別了。
加載緩存數據的高級用法?
由于加載慢,所以先調用方法[api cacheJson]顯示上次緩存的內容,加載成功后,再用最新的內容替換上次的內容,如是斷網狀態也先顯示上次緩存中的內容。當初不是還需要Api先來判斷緩存的數據是否在有效時間內,然后再決定是否是真的請求數據。而現在就是直接調用- (id)cacheJson方法獲得上次緩存的內容。前提必須重寫父類設定緩存有效時間的方法- (NSInteger)cacheTimeInSeconds返回一個大于0的值,這樣才能開啟基礎網絡請求類的緩存功能。因為默認情況下緩存數據的有效時間為0秒。
上傳文件獲得一個訪問文件的Api?
關鍵就是重寫基礎網絡請求類的- (AFConstructingBlock)constructingBodyBlock方法,在這個方法里直return一個Block代碼塊,返回參數為void直接忽略沒寫,輸入參數為一個滿足協議的formData值,數據類型自然不確定是id啦。這就相當于直接return一個NSString *tempString = @“”,只不過這里的tempString是一個^(idformData)輸入參數為fromData的Block,而且這個地方直接給Block賦值了,真的是既聲明又賦值。賦值的代碼里面首先就是壓縮圖片成NSData數據。最后通過formData調用appendPartWithFileData方法正式上傳圖片。尤其注意這里需要傳入三個參數,其一是文件的二進制數據,其二是文件名字,其三是文件夾的名字,其四很關鍵,需要傳入文件類型,圖片通常都是image/jpeg。另外文件名字和文件夾的名字可以相同,而且通常來說就是image。
統一設置網絡請求Api的請求頭HeaderField?
重寫覆蓋基礎網絡請求類的-(NSDictionnary*)requestHeaderFieldValueDictionary方法返回一個請求頭的鍵值對的字典。務必注意,請求頭字典的鍵和值都必須是NSString類型。
定制自定義的網絡請求類對象?
重寫最最基礎網絡請求YTKBaseRequest類的- (NSURLRequest *)buildCustomUrlRequest
方法,返回一個基礎網絡請求類的對象。尤其注意的是,只要返回的基礎網絡請求類的對象非nil不為空,那么會忽略其它一切自定義request的方法。
按時間緩存網絡請求內容?
意思是說按一定的時間規律來進行緩存還是說超過了一定時間后已經緩存的內容失效,其實兩者并不矛盾,正是因為緩存的內容在一段時間之后失效,所以需要重新請求數據,進行緩存。
按版本號緩存網絡請求地址?
網絡請求中統一設置CDN地址,什么是CDN地址?
全稱content delivery Network,內容分發網絡。通過在網絡各處放置節點服務器實現在現有的服務器基礎上補充一層智能虛擬網絡,智能引導用戶到最近的服務器上,是內容傳輸的更快、更穩定。
相互依賴的網絡請求的發送?
就是一個網絡請求的啟動開關取決于另一個網絡請求的請求結果。
一次性對所有的網絡請求路徑進行更改?
首先分析url參數過濾的類的實現原理,其實本質就是通過一個全新的自定義類來整合基礎的url和新增的參數字典,然后介紹url參數過濾的類的使用方法。
1、新建一個url參數過濾的類,這個類的.h方法里面有一個協議,協議里面主要實現了兩個方法,第一個方法輸入參數是一個字典,返回一個自定義類的對象;第二個方法就是輸入參數一為原始url的字符串,參數二為基礎網絡請求類的對象,返回參數是一個全新的url字符串。
2、.m方法里面首先包括一個名為參數arguments的全局變量字典。前面說過返回的參數為url參數過濾的類的對象本身,恰好這個url參數過濾的類的對象的初始化就需要傳入argument字典。讓我奇怪的是為什么是url參數過濾的類生成類時的self對象來調用alloc來開辟內存空間。而且又返回一個url參數過濾的類的對象,好奇怪。
3、在輸入原始url和增加的request兩個參數之后返回一個全新的url字符串。這里面務必注意這里是通過網絡請求私有類來調用一個方法拼接原始的url和新增的參數字典,最后返回一個字符串,反而當初傳進來的request網絡請求類對象并沒有使用。