我有一个视图,将显示下载的图像和文本。我想使用ASIHTTPRequest异步处理所有下载,但我不确定如何在下载完成后通知视图...
如果我将视图控制器作为ASIHTTPRequest的委托者传递,然后我的视图被销毁(用户导航离开),当它尝试向视图控制器发送消息时,它是否会正常失败,因为委托现在为零?
即。如果我这样做:
UIViewController *myvc = [[UIViewController alloc] init];
request.delegate = myvc;
[myvc release];
myvc,request.delegate now ==指向nil的指针?
这是自学成才的问题......我对某些基本概念有点模糊。
欢迎提出如何处理此问题的其他想法。
答案 0 :(得分:3)
更新: 查看source code for ASIHTTPRequest,不保留其委托,因此您的代码必须确保委托人尚未被释放,或者在释放控制器之前将请求的委托属性设置为nil
。
如果要运行多个异步HTTP请求,最好创建一个HTTPRequestManager
类作为HTTP请求的所有的委托。这个HTTPRequestManager
类将在应用程序的整个生命周期内保留在内存中,如果/当您的视图控制器被释放时,它可以正常地处理失败。
我想补充说明Cocoa的引用计数内存管理。请务必记住,已发布的对象不会自动设置为nil
。向nil
发送消息是完全合法的(并且什么都不做),但是向已删除的对象发送消息是未定义的行为。保持指向已删除对象的指针是一个麻烦,这种生命/死亡指针被称为僵尸。