iOS ASI--同步和异步请求

1.添加ASI框架到项目

1>ASI框架在判断网络状态时,依赖于Reachability,可以在苹果的官方文档里找到,也可以ASI的Sample例子里找到.

2>添加ASI所依赖的类库: SystemConfiguration是Reachability所需要的类库

3>如果是ARC项目,还要在Targets-Compile Sources-Compiler Flags里把ASI的.m文件,都置为 -fno-objc-arc

4>最后编译程序,看成功否

2.发起请求

2.1同步请求

// 设置url

NSURL *url = [NSURL URLWithString:@"http://api.openweathermap.org/data/2.5/weather?lat=35&lon=139"];

// 设置请求

ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:url];

request.timeOutSeconds = 10;

// 发起请求

[request startSynchronous];

// 拿到服务器返回的数据

if (request.error) {

NSLog(@"有错");

}else{

NSLog(@"状态码%d",request.responseStatusCode);

NSLog(@"返回的信息:%@",request.responseString);

NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:request.responseData options:NSJSONReadingMutableLeaves error:nil];

NSLog(@"dict------%@",dict);

}

2.2 异步请求

// 设置url

NSURL *url = [NSURL URLWithString:@"http://api.openweathermap.org/data/2.5/weather?lat=35&lon=139"];

// 设置请求

ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:url];

// 设置代理

request.delegate = self;

// 发起请求

[request startAsynchronous];

#pragma mark - ASIHTTPRequestDelegate

-(void)requestStarted:(ASIHTTPRequest *)request{

  NSLog(@"开始请求");  

}

- (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data{ 

  NSLog(@"正在接收服务器返回的数据"); // 该方法可能会被调多次,因为要拼接数据

}

- (void)requestFinished:(ASIHTTPRequest *)request{

  NSLog(@"请求结束");

NSData *data = request.responseData; // 这样就可以拿到请求完成的最终数据

}

- (void)requestFailed:(ASIHTTPRequest *)request{

NSLog(@"请求失败");

}

用ASI做异步请求的坑点:

  假设某应该有A,B两个控制器,点A控制器的导航按钮会跳到B控制器.在控制器B发起异步请求,请求正在进行中(也就是正在调代理方法request:didReceiveData:),此时点了返回键,返回到A控制器,也就是把B控制器干掉了,按上面异步请求代码会报坏内存访问的错误

  因为request.delegate = B控制器,请求正在进行时,B控制器正在执行 [self  request:xx didReceiveData:xx];如果把B控制器干掉,程序在执行[self  request:xx didReceiveData:xx]这个方法时,找不到B控制器了,就会报坏内存访问的Error.

  解决这个坑点的办法,在B控制的dealloc里把请求清除掉.标蓝代码是修改的代码

 @property (nonatomic,strong) ASIHTTPRequest *request;

// 设置url

NSURL *url = [NSURL URLWithString:@"http://api.openweathermap.org/data/2.5/weather?lat=35&lon=139"];

// 设置请求

self.request = [ASIHTTPRequest requestWithURL:url];

// 设置代理

self.request.delegate = self;

// 发起请求

[self.request startAsynchronous];

- (void)dealloc {

[self.request clearDelegatesAndCancel];

}

时间: 2024-11-03 21:51:02

iOS ASI--同步和异步请求的相关文章

[IOS_HTTP]NSURLConnection同步与异步请求

今天看到<WIN32多线程程序设计>的同步控制时,才发现原来自己对同步和异步的概念很模糊,甚至混淆.于是GOOGLE了一下.下面都是高人们的见解,简单明了. 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式.  异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式. 举个不太恰当的例子,就像:  SendMessage(...)  TRACE0("just  like  send");   PostMessage(...) 

关于jquery同步和异步请求问题总结

关于jquery同步和异步请求问题总结 问题 这几天做项目的时候,写脚本遇到一个问题,就是jquery异步请求和同步请求执行顺序不按代码顺序执行而是最后执行导致添加数据报错,添加到空值,这怎么忍,于是我去查找jquery api,终于知道了原来jquery默认异步请求,防止数据卡死,终于让我找到了这货 async,当async: true 时,ajax请求是异步的.当async : true 时,就是同步的,但是我又有个问题,怎么设置,这个在哪设置,用$.ajax去写这个操作,不,不太麻烦了,到

jquery 同步和异步请求

1. $.ajax 同步和异步请求 1 $.ajax({ 2 type: "POST", 3 url: "some.php", 4 async : true, // true 异步,false 同步 5 // or data:{name:"John",locationi:"Boston"} 6 data: "name=John&location=Boston", 7 success: functio

【Java&amp;Android开源库代码剖析】のandroid-async-http(如何设计一个优雅的Android网络请求框架,同时支持同步和异步请求)开篇

在<[Java&Android开源库代码剖析]のandroid-smart-image-view>一文中我们提到了android-async-http这个开源库,本文正式开篇来详细介绍这个库的实现,同时结合源码探讨如何设计一个优雅的Android网络请求框架.做过一段时间Android开发的同学应该对这个库不陌生,因为它对Apache的HttpClient API的封装使得开发者可以简洁优雅的实现网络请求和响应,并且同时支持同步和异步请求. 网络请求框架一般至少需要具备如下几个组件:1

C# ASP.NET Core使用HttpClient的同步和异步请求

引用 Newtonsoft.Json // Post请求 public string PostResponse(string url,string postData,out string statusCode) { string result = string.Empty; //设置Http的正文 HttpContent httpContent = new StringContent(postData); //设置Http的内容标头 httpContent.Headers.ContentType

同步和异步请求

// //  ViewController.m //  UI-NO-18 // //  Created by Bruce on 15/8/13. //  Copyright (c) 2015年 Bruce. All rights reserved. // #import "ViewController.h" #import "InfoModel.h" @interface ViewController () @end @implementation ViewCont

iOS网络: NSURLConnection进行异步请求

介绍:  iOS 的应用,一般是需要通过网络进行数据的交互的,这样你的应用就成为了联机的应用了. iOS SDK 允许我们向网络发送请求,并且能够很方便的通过 NSURLConnection 这个类 来获取和发送数据,我们可以通过 NSJSONSerialization 对 JSON 进行序列化和反序列化. XML 的解析则使用 NSXMLParser 类.可以通过 Twitter 框架进行 Twitter 进行连接. 一  通过NSURLConnection进行异步下载 1. NSURLCon

同步、异步请求

IOS之同步请求.异步请求.GET请求.POST请求 1.同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, 2.异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行 3.GET请求,将参数直接写在访问路径上.操作简单,不过容易被外界看到,安全性不高,地址最多255字节: 4.POST请求,将参数放到body里面.POST请求操作相对复杂,需要将参数和地址分开,不过安全性高

iOS:转载:同步、异步、并行、串行的详解

理解 iOS 开发中 GCD 相关的同步(synchronization)\ 异步(asynchronization),串行(serial)\ 并行(concurrency)概念 2014年11月21日iOSasynchronization.concurrency.GCD.iOS.serial.synchronization.串行.同步.并发.异步 iOS 开发过程中,常常需要用到多线程技术,GCD 是常用的实现多线程的技术,其因简洁底层而备受欢迎. GCD 技术中,同步(synchroniza