(void)requestReceivedResponseHeaders:(NSMutableDictionary *)newResponseHeaders {
if ([self error] || [self mainRequest]) { return; }
--> if (delegate && [delegate respondsToSelector:didReceiveResponseHeadersSelector]) {

先是封装了一个ASIHttprequest 异步调用的类,但是在每次打开调用这个类的viewController的时候会报错,不是全部报错,报错的位置位于上面这一条。

一直百思不得其解,类似的问题有

http://stackoverflow.com/questions/5701132/asihttprequest-crashes-my-app

http://www.open-open.com/lib/view/open1363230763484.html

http://www.cocoachina.com/bbs/read.php?tid=253887

看过之后,确定封装的类没有问题,问题在于ARC过早的释放了ASIHttprequest的对象。

原来的引用的代码

BIDJsonConn *conn=[[BIDJsonConn alloc]intiwithurl:mainurl]
conn.delegateforConn=self;
NSString *inUrl=[[NSString alloc]initWithFormat: @"GetUserID/%@",_thisuser.username];
[conn GetdataByJsonAsy:inUrl];

get的异步访问方法

-(void)GetdataByJsonAsy:(NSString *)inUrl{
NSMutableString *str_serverUrl=[[NSMutableString alloc]initWithString:self.mainUrl];
[str_serverUrl appendString:inUrl];
NSURL *url=[NSURL URLWithString:str_serverUrl];
ASIHTTPRequest *request=[ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request startAsynchronous];
}

高手们应该一眼能看出这个问题

BIDJsonConn 的实例conn在这里实例化后运行完这一段代码很可能就被释放了。这个时候异步完成回调的时候就找不到对象了,因为就会报错

将conn声明为变量

@interface BIDWelcomeViewController : UIViewController<JsonConnDeleage>
{
BIDJsonConn *conn;
}

在viewload中实例化,就不会再报错了。

这个问题其实不是只局限于ASIHttprequest 的异步调用,适合很多异步调用的例子都需要注意这个问题,需要将异步执行的对象声明为该类的变量

AFNetworking比ASIHttprequest 新很多也支持ARC,下次还是看看AFNetworking吧

著作权声明:本文由http://www.cnblogs.com/keithmoring/原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!

最新文章

  1. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
  2. iOS 学习 - 18.TextField 自定义菜单事件,复制和微信分享
  3. JQ入门学习实战演练
  4. Github 新的项目管理模式——Projects
  5. Codeforces Gym 100114 J. Computer Network
  6. what's the difference between dim as and dim as new?
  7. Range
  8. ADO.NET 新特性之SqlBulkCopy
  9. 那些教程没有的php3-命名空间
  10. uafxcwd.lib(afxmem.obj) : error LNK2005 解决方法
  11. hiho1091_clicker背包问题
  12. SQL SERVER 生成ORACLE建表脚本
  13. 我的日常工具——gdb篇
  14. java 经典题
  15. 29个你必须知道的Linux命令
  16. Qt编程之QString 处理换行
  17. mirantis cert
  18. drupal 7 模块开发,hook_form
  19. HDU-4628 Pieces 如压力DP
  20. H5与客户端联调

热门文章

  1. matlab中syms与sym有什么差别
  2. android开发中,在java中怎样使用c提供过来char*
  3. LRU的C++实现引申出的迭代器问题
  4. KINavigationController使用演示例子
  5. 《DirectX 9.0 3D游戏开发编程基础》必备的数学知识 读书笔记
  6. leetcode第一刷_Balanced Binary Tree
  7. response.addCookie(cookie),添加失败
  8. IOS开发之ZBarReaderView的使用
  9. HDU - 5301 Buildings
  10. 升级/安装主题插件提示权限不足 输入FTP解决办法