使用GCD的时候容易犯的小错误总结
2013-10-28 14:58
274 查看
1、前提是没开启ARC,一些aotorelease对象在超出它本身所在块的范围之后被使用,会引起程序crash:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
__block NSURLResponse *response = nil;
__block NSError *error = nil;
__block NSData *receiveData = nil;
NSURLRequest *request = [self gcdHelperRequest:&error];
if (request)
{
receiveData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; //(1)
NSLog(@"receiveData:%@", receiveData); //(2)
}
if (self.gcdHelperServiceBlock)
{
dispatch_async(dispatch_get_main_queue(), ^{
self.gcdHelperServiceBlock(response, error, receiveData); //(3)
});
}
});
这段代码是有问题的,(1)处有问题,(2)处可以正常打印数据,(3)处程序挂了。
改正:receiveData =[ [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error] retain];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
__block NSURLResponse *response = nil;
__block NSError *error = nil;
__block NSData *receiveData = nil;
NSURLRequest *request = [self gcdHelperRequest:&error];
if (request)
{
receiveData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; //(1)
NSLog(@"receiveData:%@", receiveData); //(2)
}
if (self.gcdHelperServiceBlock)
{
dispatch_async(dispatch_get_main_queue(), ^{
self.gcdHelperServiceBlock(response, error, receiveData); //(3)
});
}
});
这段代码是有问题的,(1)处有问题,(2)处可以正常打印数据,(3)处程序挂了。
改正:receiveData =[ [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error] retain];
相关文章推荐
- 使用GCD的时候容易犯的小错误总结
- Java 使用内部类时候的容易产生的错误
- 使用maven编译的时候提示 maven-source 1.3 中不支持注释请使用 -source 5 或更高版本以启用注释的错误。
- ios-新浪微博开发-(使用AFN三方库出现的错误总结)
- 在使用ffmpeg安装编译x265时候的错误
- git 与oschina git ,github 上的使用错误实战总结
- PHP 错误与异常 笔记与总结(11 )register_shutdown_function() 函数的使用
- VS2013中使用git发布解决方案master分支的时候出现错误
- 使用source命令的时候提示source: command not found错误解决
- python使用pip安装模块的时候出现ascii错误
- ArcGIS Server GP服务使用常见错误总结
- masonry 使用remake时容易犯的一种错误
- SpringMvc:在使用@RequestBody和@ResponseBody的时候报415错误
- 使用JNDI的一个容易忽略的错误
- android源码使用proguard混淆编译及错误总结
- 使用NSInteger容易忽视的错误
- 数据在SQLLDR的时候提示错误, 使用TRAILING NULLCOLS
- PHP 中使用ajax时一些常见错误总结整理
- 安装Xen、创建Xen虚拟机、使用Xen虚拟机过程中经常出现的错误总结