成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

IOS開發架構封裝異步請求案例實現

移動開發 iOS
IOS開發架構封裝異步請求案例實現是本文要介紹的內容,主要是實現IOS開發中異步請求的封裝案例,來看本文詳細內容講解。

IOS開發架構封裝異步請求案例實現是本文要介紹的內容,主要是實現IOS開發異步請求的封裝案例,來看本文詳細內容講解。

在找IOS開發相關的內容是,看到本文,與朋友們分享一下。論壇里看到一位兄臺的問題:”異步請求能不能封裝誠一個公用的類?每個頁面都要copy一下幾個方法,感覺很麻煩“可能很多人也會有相同的問題,于是起一篇博客專門談談這個問題,主要想闡述一下編程思想及架構設計,權當拋磚引玉。閑話不多說,直接上代碼:

  1. MyURLClass.h  
  2.  
  3. #import <Foundation/Foundation.h>     
  4.     
  5.     
  6. @interface MyURLClass : NSObject {    
  7.         
  8. @private    
  9.     NSMutableSet *mDelegates;    
  10.     NSMutableData *mData;    
  11. }    
  12.     
  13. - (void) addDelegate:(id)delegate;    
  14. - (void) removeDelegate:(id)delegate;    
  15.     
  16. @end    
  17. #import <Foundation/Foundation.h> 
  18.  
  19.  
  20. @interface MyURLClass : NSObject {  
  21.       
  22. @private  
  23.     NSMutableSet *mDelegates;  
  24.     NSMutableData *mData;  
  25. }  
  26.  
  27. - (void) addDelegate:(id)delegate;  
  28. - (void) removeDelegate:(id)delegate;  
  29.  
  30. @end  
  31. MyURLClass.m  
  32.  
  33. @implementation MyURLClass    
  34.     
  35. - (id)init {    
  36.     [super init];    
  37.     mDelegates = [NSMutableSet new];    
  38.     mData = [NSMutableData new];    
  39.     return self;    
  40. }    
  41.     
  42. - (void) addDelegate:(id)delegate {    
  43.     [mDelegates addObject:delegate];    
  44. }    
  45. - (void) removeDelegate:(id)delegate{    
  46.     [mDelegates removeObject:delegate];    
  47. }    
  48.     
  49. - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {    
  50.     [mData appendData:data];    
  51. }    
  52.     
  53. - (void) connectionDidFinishLoading : (NSURLConnection *) connection {    
  54.     NSLog(@"delegate:%@", mDelegates);    
  55.     SEL seltor = @selector(finishWithData:);    
  56.     NSSet * set = [[NSSet alloc] initWithSet:mDelegates];    
  57.     for (id del in set) {    
  58.             
  59.         if ([del respondsToSelector:seltor])    
  60.             [del performSelector:seltor withObject:mData];    
  61.     }    
  62.     [set release];    
  63. }    
  64.     
  65. @end    
  66. @implementation MyURLClass  
  67.  
  68. - (id)init {  
  69.     [super init];  
  70.     mDelegates = [NSMutableSet new];  
  71.     mData = [NSMutableData new];  
  72.     return self;  
  73. }  
  74.  
  75. - (void) addDelegate:(id)delegate {  
  76.     [mDelegates addObject:delegate];  
  77. }  
  78. - (void) removeDelegate:(id)delegate{  
  79.     [mDelegates removeObject:delegate];  
  80. }  
  81.  
  82. - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {  
  83.  [mData appendData:data];  
  84. }  
  85.  
  86. - (void) connectionDidFinishLoading : (NSURLConnection *) connection {  
  87.     NSLog(@"delegate:%@", mDelegates);  
  88.     SEL seltor = @selector(finishWithData:);  
  89.     NSSet * set = [[NSSet alloc] initWithSet:mDelegates];  
  90.     for (id del in set) {  
  91.           
  92.         if ([del respondsToSelector:seltor])  
  93.             [del performSelector:seltor withObject:mData];  
  94.     }  
  95.     [set release];  
  96. }  
  97. @end 

至此,我的“異步請求類”就封裝好了,mDelegates是用來保存請求對象(即發送異步請求的那個類的對象)的,以便在異步connectionDidFinishLoading的時候調用回調方法,繼續:

  1. - (IBAction)sendMyRequest {    
  2.     NSURL *url = [NSURL URLWithString:@"http://www.csdn.net"];    
  3.     NSURLRequest *mRequest = [NSURLRequest requestWithURL:url];    
  4.         
  5.     MyURLClass *urlClass = [[MyURLClass alloc] init];    
  6.     [urlClass addDelegate:self];    
  7.     [[NSURLConnection alloc] initWithRequest:mRequest delegate:urlClass startImmediately:YES];    
  8. }    
  9.     
  10. - (void)finishWithData:(NSData *)data {    
  11.     NSLog(@"%@", data);    
  12.  }    
  13. - (IBAction)sendMyRequest {  
  14.     NSURL *url = [NSURL URLWithString:@"http://www.csdn.net"];  
  15.     NSURLRequest *mRequest = [NSURLRequest requestWithURL:url];  
  16.       
  17.     MyURLClass *urlClass = [[MyURLClass alloc] init];  
  18.     [urlClass addDelegate:self];  
  19.     [[NSURLConnection alloc] initWithRequest:mRequest delegate:urlClass startImmediately:YES];  
  20. }  
  21.  
  22. - (void)finishWithData:(NSData *)data {  
  23.     NSLog(@"%@", data);  
  24.  } 

上面這段代碼就是發送請求類的主要一段代碼

1、點擊按鈕后,新建一個MyURLClass類的對象,然后將自己添加到MyURLClass的mDelegates中,之后發送異步請求,并且發送請求的delegate設為MyURLClass的對象

2、請求響應后,就會調用MyURLClass類中的connectionDidFinishLoading方法,在這個方法中會找到發送請求類的對象,并且調用他的finishWithData方法,同時傳遞mData這個參數,至此,一個完整的http通信結束,當然不要忘了請求結束把自己從set中移除(調用removeDelegate:self)

上面的代碼只是我寫的一個小例子,主要為了體現思想,真正要是封裝并且運用到項目中的時候一定要注意:1、在addDelegate和removeDelegate的時候需要加鎖;2、應該先進行數據處理,比如轉換為NSDictionary在傳遞給finishWithData,當然,不要忘了改finishWithData的參數類型;3、如果你不想所有的回調方法名都叫finishWithData,那你可以做一個關系映射(struct和NSDictionary都可以滿足你的需求),分別存儲每個類與回調方法名的對應,同時需要修改SEL seltor = @selector(finishWithData:);這里的實現;4、如果你要寫一個封裝好的MyURLClass,一定要做成一個全局對象,千萬不要想我上面那樣在sendMyRequest中現alloc。

其實能封裝的地方還有很多,比如sendMyRequest這個方法就很有被封裝的潛力。

小結:IOS開發架構封裝異步請求案例實現的內容介紹完了,就是簡單介紹了一下一個小架構,***希望通過本文的學習能對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2022-03-02 15:31:32

架構網絡請求代碼

2013-03-28 14:11:10

iOS異步GET方法請

2012-03-01 20:32:29

iOS

2011-08-17 14:30:34

iOS開發窗口

2011-08-19 15:09:00

IOS開發

2023-07-06 08:10:57

Vue3參數請求

2011-08-03 10:39:06

IOS程序 HTTP 請求

2011-08-16 14:59:31

IOS開發ViewDidUnloiOS 5

2011-08-18 13:58:34

iPhone開發NSOperation異步

2015-06-02 09:51:40

iOS網絡請求封裝接口

2011-08-15 15:44:46

iPhone開發PDF

2011-08-18 16:24:44

iPhone開發圖片

2021-09-26 06:43:07

封裝網絡請求

2011-08-16 15:48:37

iPhone開發抓圖程序

2011-08-19 11:10:31

iPhone應用

2011-08-19 10:13:05

iPhone開發

2011-08-22 16:08:46

IOS開發數據庫

2023-09-18 07:46:28

2017-12-25 14:59:47

APP架構iOS協議

2024-07-31 15:57:41

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品免费国产一区二区三区四区介绍 | 久久黄网| 国产亚洲精品美女久久久久久久久久 | 曰韩三级 | 天天看天天爽 | 99综合 | 日产精品久久久一区二区福利 | 国产成人精品久久二区二区91 | 国产午夜精品一区二区三区嫩草 | 草草视频在线播放 | 欧美精品一二区 | 午夜看片 | 罗宾被扒开腿做同人网站 | 欧美中文字幕在线 | 国产精品成人在线播放 | 91精品久久久 | 日韩午夜一区二区三区 | 超碰在线人人干 | 91视频久久 | 久久久精品视频免费 | 中文字幕乱码一区二区三区 | 色综合色综合色综合 | 2020国产在线 | 五十女人一级毛片 | 亚洲欧美成人影院 | 美日韩一区二区 | 69av片| 日批免费观看 | 色又黄又爽网站www久久 | 狠狠躁夜夜躁人人爽天天高潮 | 欧美成年黄网站色视频 | 中文字幕一区在线观看视频 | 日韩高清中文字幕 | 亚洲一区二区三 | 久久免费精品 | 理伦毛片 | 毛片网站免费观看 | 日本高清中文字幕 | 欧美精品一区久久 | 成人免费看黄 | 一级a性色生活片久久毛片 午夜精品在线观看 |