讀AFNetworking源碼第三次的收穫與思考

改造爲工具類,其餘地方沒變: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.性能

感受腦殼不夠用了,繼續看吧,能多瞭解點就多瞭解點,畢竟本身也是這個遊戲裏的一個角色。調試

相關文章
相關標籤/搜索