iPhone開發(fā)學習筆記Three20 NetWork教程
iPhone開發(fā)學習筆記Three20 NetWork教程是本文要介紹的內容,主要是來學習Three20 NetWork的操作。本文又很詳細的詳解,一起來看詳細內容。
還是老規(guī)矩我比較喜歡貼代碼:
- void TTNetworkRequestStarted();//開始狀態(tài)欄小飛輪
- void TTNetworkRequestStopped();//停止狀態(tài)欄小飛輪
- #define TTIMAGE(_URL) [[TTURLCache sharedCache] imageForURL:_URL]//緩沖中提取圖片,沒有就去網絡下載
緩存方案
- typedef enum {
- TTURLRequestCachePolicyNone = 0,
- TTURLRequestCachePolicyMemory = 1,
- TTURLRequestCachePolicyDisk = 2,
- TTURLRequestCachePolicyNetwork = 4,
- TTURLRequestCachePolicyNoCache = 8,
- TTURLRequestCachePolicyEtag = 16 | TTURLRequestCachePolicyDisk,
- TTURLRequestCachePolicyLocal
- = (TTURLRequestCachePolicyMemory | TTURLRequestCachePolicyDisk),
- TTURLRequestCachePolicyDefault
- = (TTURLRequestCachePolicyMemory | TTURLRequestCachePolicyDisk
- | TTURLRequestCachePolicyNetwork),
- } TTURLRequestCachePolicy;
網絡鏈接的主要的一個類:TTURLRequest.相當于ios的NSUrlRequest
- #import <Foundation/Foundation.h>
- @interface TTURLRequest : NSObject
- @property (nonatomic, copy) NSString* urlPath;//網絡請求的Url
- @property (nonatomic, copy) NSString* URL __TTDEPRECATED_METHOD;//和上邊那個是一樣的。老外真麻煩 用兩個 呵呵
- @property (nonatomic, copy) NSString* httpMethod;//http請求的方法
- @property (nonatomic, retain) id<TTURLResponse> response;//這個就是接收數據的對象
- @property (nonatomic, retain) NSData* httpBody; //這個是postBody
- @property (nonatomic, copy) NSString* contentType;如果是post或者put的時候這個對象才會被填充 默認為multipart/form-data
- @property (nonatomic, readonly) NSMutableDictionary* parameters;//POST/PUT 的參數就是key 和 value
- @property (nonatomic, readonly) NSMutableDictionary* headers;//http請求頭
- @property (nonatomic) TTURLRequestCachePolicy cachePolicy;//缺省為TTURLRequestCachePolicyDefault 這個在上面已經提到了
- @property (nonatomic) NSTimeInterval cacheExpirationAge;//提取緩存的時間默認為一個星期 也就是說在緩存中超過一個星期的就會被重新下載
- @property (nonatomic, copy) NSString* cacheKey;//這個是http緩存標志Etag的key Etag
- @property (nonatomic, retain) id userInfo;
- @property (nonatomic, retain) NSDate* timestamp;
- @property (nonatomic) BOOL isLoading;//當前是否正在進行網絡鏈接
- @property (nonatomic) BOOL shouldHandleCookies;//這里是關于coockie的設置。默認為yes。就是儲存和發(fā)送coockies。no則相反
- @property (nonatomic) NSInteger totalBytesLoaded;//這次請求加載的字節(jié)數
- @property (nonatomic) NSInteger totalBytesExpected;
- @property (nonatomic) NSInteger totalBytesDownloaded;//從服務器上現在文件的字節(jié)數
- @property (nonatomic) NSInteger totalContentLength;//這次請求內容的長度,就是字數
- @property (nonatomic) BOOL respondedFromCache;//這次網絡請求的資源,是否來自緩存
- @property (nonatomic, assign) BOOL filterPasswordLogging;
- @property (nonatomic) NSStringEncoding charsetForMultipart;//當使用multipart/form-data data發(fā)送請求的時候,數據的編碼方式
- @property (nonatomic, readonly) NSMutableArray* delegates;//網絡請求的代理類。具體可以進去看一下,很簡單,就一個代理方法
- + (TTURLRequest*)request;//類方法,這個不用我說了吧,大家都應該明白 呵呵
- + (TTURLRequest*)requestWithURL:(NSString*)URL delegate:(id /*<TTURLRequestDelegate>*/)delegate;//同上
- - (id)initWithURL:(NSString*)URL delegate:(id /*<TTURLRequestDelegate>*/)delegate;//同上
- - (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;//設置請求頭
- - (void)addFile:(NSData*)data mimeType:(NSString*)mimeType fileName:(NSString*)fileName;//發(fā)送二進制文件
- - (BOOL)send;//發(fā)送異步請求,如果返回為yes,表示此次請求的資源來自緩存
- - (BOOL)sendSynchronously;//發(fā)送同請求
- - (void)cancel;//退出網絡鏈接,呵呵 挺有用哈
- - (NSURLRequest*)createNSURLRequest;//同上
- @end
- 按照three20 TTNetWorkDemo工程里的目錄,下一個目錄應該是Responses
- 在這個文件夾里有兩個類,分別是TTURLDataResponse TTURLImageResponse 這兩個類其實很簡單,就實現了了一個協(xié)議方法。
- 這兩個類是為前面提到的TTURLRequest的屬性responses準備的。
- 接下來是requests文件夾里面有很多文件和文件夾
- 首先說TTURLRequestDelegate.h:這個文件里定義了一個協(xié)議。這個協(xié)議和ios里NSUrlRequest的delegate差不多,方法和方法名稱很相似。
- 大家可以自己看一下。如果再寫這個我感覺意義不大
- 接下來是TTURLRequestCachePolicy.h這個文件里定義了一個結構體,這個結構提是為TTUrlRequest的cacheKey準備的至于這個結構提的用法
- 在我的博客http://blog.csdn.net/diyagoanyhacker/archive/2011/05/05/6396524.aspx中有專門詳細的介紹。
- 更新中
- 接下來是一個比較重要的類,說他重要是因為他扮演著ios中線程池或者線程隊列的角色,還句話說就是這個類是app中所有的網絡鏈接的管理者。厲害吧!
- @interface TTURLRequestQueue : NSObject
- @property (nonatomic) BOOL suspended;//是否接受新的網絡鏈接,如果是no,則新的網絡鏈接請求被吊起,直到他yes。
- 因為網絡鏈接會降低手機的性能,所以three20給我們提供了可以控制的借口
- @property (nonatomic) NSUInteger maxContentLength;//最大網絡下載數據的長度,默認為150000 bytes。這是為了防止過多的占用內存。
- 其實我們有更好的辦法防止這樣的事情發(fā)生。如果需要發(fā)郵件聯(lián)系我。
- @property (nonatomic, copy) NSString* userAgent;//設置http請求的user-Agent頭:它是一個特殊字符串頭,使得服務器能夠識別客戶使用的
- 操作系統(tǒng)及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。如果在這里設置了,則所有的請求都會使用。
- @property (nonatomic) CGFloat imageCompressionQuality;//壓縮圖片的系數,默認為0.75.這種壓縮是影響分辨率的。應謹慎設置!
- + (TTURLRequestQueue*)mainQueue;//得到共享的TTURLRequestQueue。TTUrlRequest都會加入這里面。
- + (void)setMainQueue:(TTURLRequestQueue*)queue;設置得到共享的TTURLRequestQueue。這個我們一般情況下用不到
- - (BOOL)sendRequest:(TTURLRequest*)request;//發(fā)送異步請求,如果返回為yes,說明資源是從緩存中得到的。反之,反之。
- - (BOOL)sendSynchronousRequest:(TTURLRequest*)request;//發(fā)送同步請求。返回值同上。
- - (void)cancelRequest:(TTURLRequest*)request;//切斷一個網絡鏈接
- - (void)cancelRequestsWithDelegate:(id)delegate;//大家可以討論一下這個借口的用法
- - (void)cancelAllRequests;//停止所有的網絡鏈接包括被吊起的網絡鏈接
- - (NSURLRequest*)createNSURLRequest:(TTURLRequest*)request URL:(NSURL*)URL;//創(chuàng)建一個網絡請求,這個函數一般情況下是被自身所調用。我們接觸不到
- @end
好的,這個類給講解完了,實際上寫到這里,我感覺有點那沒為什么沒有訪問app中所有網絡鏈接(TTUrlRequest)的接口呢?實際上這個接口被three20放到TTRequestLoader.h里面的_request屬性里面了。下面我們講解一下TTRequestLoader.h
TTRequestLoader.h管理這TTUrlRequest的設置,利用ios的NSURLConnection,進行實際的網絡鏈接。以及管理TTUrlRequest的回調函數,如開始下載調用哪個函數,結束現在調用哪個函數。
TTRequestLoader實現了NSURLConnectionDelegate協(xié)議。
實際上每一個TTUrlRequest都有一個自己的TTRequestLoader。
TTRequestLoader會裝在具有相同設置的TTUrlRequest
- @interface TTRequestLoader : NSObject
- @property (nonatomic, readonly) NSArray* requests;//附屬于這個loader的TTUrlRequests
- @property (nonatomic, readonly) NSString* urlPath;//請求的url
- @property (nonatomic, readonly) NSString* cacheKey;//請求的cacheKey,用來表示數據緩存的
- @property (nonatomic, readonly) TTURLRequestCachePolicy cachePolicy;//緩存計劃
- @property (nonatomic, readonly) NSTimeInterval cacheExpirationAge;//緩存的資源的有效時間
- @property (nonatomic, readonly) BOOL isLoading;//正在進行網絡鏈接嗎?
- @property (nonatomic, readonly) NSString* URL __TTDEPRECATED_METHOD;//url
- - (id)initForRequest:(TTURLRequest*)request queue:(TTURLRequestQueue*)queue;
- - (void)addRequest:(TTURLRequest*)request;//不說了
- - (void)removeRequest:(TTURLRequest*)request;//不說了
- - (BOOL)cancel:(TTURLRequest*)request;//推出網絡鏈接
- - (NSError*)processResponse:(NSHTTPURLResponse*)response data:(id)data;
- - (void)dispatchError:(NSError*)error;
- - (void)dispatchLoaded:(NSDate*)timestamp;
- - (void)dispatchAuthenticationChallenge:(NSURLAuthenticationChallenge*)challenge;
- - (void)cancel;
小結:iPhone開發(fā)學習筆記Three20 NetWork教程的內胎介紹完了,希望通過本文的學習能對你有所幫助!