您的位置:首页 > 移动开发 > IOS开发

IOS:同步请求和异步请求

2013-12-27 11:15 120 查看
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:pURL
cachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:60];

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

[NSURLConnectionconnectionWithRequest:pRequest
delegate: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];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: