改造爲工具類,其餘地方沒變:php
[RequestTools getRequest:@"http://ip.taobao.com/service/getIpInfo.php?ip=myip" success:^(NSDictionary * _Nonnull dic) { NSLog(@"請求的數據dic:%@",dic); } error:^(NSError * _Nullable error) { NSLog(@"請求的數據失敗error:%@",error); }]; + (void)getRequest:(NSString *)requestUrlString success:(RequestSuccessBlock)successBlock error:(RequestFailureBlock)errorBlock;
目前來看,直接用工具方法有個很差的地方就是 單例能夠有本身的屬性,類方法不行,類方法在實現某些功能的時候受限,由於沒有成員變量或者是數據啊。可是類方法只知道一個類名就能夠調用。其餘並暫時並無感受到很差,根據需求和細節再定吧,單如今這個功能,用哪一個都行,遇到不一樣 再來補充。 參考使用:https://www.jianshu.com/p/50e47311f0d0 。 類方法與單例。這裏就先用類方法,就把單例相關方法給註釋掉了。json
而後對比一下本身寫的和AF最初的寫法,感受本身寫的好 - - ,第一個緣由呢,是個人能夠打印 請求結果的json數據,而AF這個版本的 不知道是哪裏有問題仍是太舊了,請求成功了,可是隻拿到了請求頭的數據,沒有拿到json的數據。接下來得好好分析一下了:服務器
//打斷點一步步調試就能找到問題。 AFHTTPOperation *operation = [AFHTTPOperation operationWithRequest:request callback:callback]; [operation start]; //打印出data須要修改 QHTTPOperation裏的狀態 進行json格式化 if (self.statusCodeAcceptable) { [[NSNotificationCenter defaultCenter] postNotificationName:AFHTTPOperationDidSucceedNotification object:self]; if(self.callback.successBlock) { data = [NSJSONSerialization JSONObjectWithData:self.responseBody options:kNilOptions error:nil]; self.callback.successBlock(self.lastRequest, self.lastResponse, data); } }
問題 解決 成功打印出來。網絡
爲何要整個操做任務呢?並且這個任務繼承自蘋果的一個文件:QHTTPOperation QHTTPOperation: 在AFHTTPOperation和AFImageRequestOperation 下面是QHTTPOperation,一個管理NSURLConnection委託方法的NSOperation子類。它是至關健壯的、高性能的、完整的,因此咱們沒有本身動手,而是在此基礎上構建了一個網絡。若有須要,咱們可自行生產。工具
NSURLConnection - 從iOS2.0開始有,已經有十多年的年齡了 . 在平時開發中,咱們幾乎不會用到NSURLConnection,由於咱們用的都是別人給你封裝好的,可是咱們也要去了解挖掘它,才能更好的使用三方庫。 **NSURLConnection:負責發送請求,創建客戶端和服務器的鏈接。發送NSURLRequest的數據給服務器,並收集來自服務器的響應數據 ** 看來AFNetworking這個網絡庫網絡方面的知識遠比SDWebImage要複雜 涉及的多。post
NSURLConnection 是 iOS2.0後推出的,NSURLSession 是iOS7.0後推出的,用於代替 NSURLConnection. 二者不一樣知識普及具體參考資料:https://www.jianshu.com/p/877dec0530d5 目前看來本身封裝的原生的是 7.0之後的新方法,而AF第一個版本用的是以前的NSURLConnection.性能
感受腦殼不夠用了,繼續看吧,能多瞭解點就多瞭解點,畢竟本身也是這個遊戲裏的一個角色。調試