IOS:同步请求和异步请求

来源:互联网 发布:淘宝无线端装有白边 编辑:程序博客网 时间:2024/05/17 18:01

      1、同步请求和异步请求

       同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作,

      异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行。


     2、代码实现

      创建一个空项目,在AppDelegate.h中遵守协议,并声明一个属性来存储数据。


     

@interface AppDelegate :UIResponder <UIApplicationDelegate,NSURLConnectionDataDelegate>


@property (strong,nonatomic)UIWindow *window;


@property(retain,nonatomic)NSMutableData *pData;


@end

      

    在AppDelegate.m

  首先声明一个宏定义,

   #define  URL @"http//www.baidu.com"


 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    self.window = [[[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]]autorelease];

    // Override point for customization after application launch.

    self.window.backgroundColor = [UIColorwhiteColor];

    //同步请求


    //创建URL

    //NSURL *pUrl = [NSURL URLWithString:URL];

    //创建一个请求

    /*NSURLRequest *pRequ = [NSURLRequest requestWithURL:pUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];

    //建立连接

    NSError *pError = nil;

    

    NSURLResponse *pRespond = nil;

    //向服务器发起请求,(线程会一直等待服务器响应,直到超出60秒,)

    NSData *pData = [NSURLConnection sendSynchronousRequest:pRequ returningResponse:&pRespond error:&pError];

    

    NSLog(@"pData = %@",pData);

    

    NSLog(@"pError = %@",[pError localizedDescription]);*/

    

    //异步请求

    //获取网络资源路径

   NSURL *pURL = [NSURLURLWithString:URL];

    //根据URL创建请求

    //NSURLRequest初始化方法第一个参数:请求访问路径,第二个参数:缓存协议,第三个参数:网络请求超时时间(秒)

    NSURLRequest *pRequest = [NSURLRequestrequestWithURL:pURLcachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:60];

    //发起请求,通过委托模式回调完成数据获取

    [NSURLConnectionconnectionWithRequest:pRequestdelegate:self];

    

    [self.windowmakeKeyAndVisible];

    

    return YES;

}


- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

{

    NSLog(@"服务器接收响应");

    //初始化

    self.pData = [NSMutableDatadataWithCapacity:5000];

}

//服务器返回数据,客户端开始接受

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

{

    NSLog(@"开始接受数据");

    //将数据放入缓存区

    [self.pDataappendData:data];

}

//数据接收完毕调用的方法

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

{

    NSLog(@"数据接收完毕");

    

    NSLog(@"pData = %@",self.pData);

}

//数据接收失败时调用的方法

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

{

    NSLog(@"数据接收失败,原因:%@",[errorlocalizedDescription]);

}

     同时不要忘了释放pData啊。

   

- (void)dealloc

{

    [_pDatarelease];

    [_windowrelease];

    [superdealloc];

}



       
           
0 0
原创粉丝点击