大家好,我在iphone里面联网操作的时候总是出现调用了被释放的对象,比如我在A页面有个按钮,点击进入B页面,在B页面我使用ASIHTTPRequest联网操作,但是网速很慢,我点了了返回,回到了A页面,那么我的ASIHTTPRequest就会报错,出现delegate(这个delegate代表B)被提前dealoc了,我想问下这个问题我需要怎么操作来解决啊,我写了N多if,但是都不管用,它不像java可以直接抛异常,所以在此请教各位大牛,谢谢了,

解决方案 »

  1.   

    你在返回时清空 delegate就行了。
      

  2.   

    在B的dealloc方法中将asi的delegate指向nil
      

  3.   

    楼上可行,不过根本还是网络访问线程和主线程操作共享资源可能导致访问挂掉的问题:
    正确的做法,需要设置互斥量,在返回以及网络线程回调操作中分别设置,进行正确的释放以及delegate设置为空。
      

  4.   

    这是官方的做法,request是一个ivar- (void)dealloc
    {
       [request clearDelegatesAndCancel];
       [request release];
       ...
       [super dealloc];
    }
      

  5.   

    应该是在你需要delete的时候要cancel download就可以了
      

  6.   

    这应该是你的进度条代理被释放的原因,你可以在viewWillDisappear中将request的代理设为nil.
    [request setDownloadProgressDelegate:nil];
      

  7.   

    弱弱问一下哈,为什么我写了这么久的代码,从来没写过这个函数
    - (void)dealloc
    {
      [request clearDelegatesAndCancel];
      [request release];
      ...
      [super dealloc];
    }
    Xcode4.2以上不是可以不用手动释放吗?
      

  8.   

    你采用了arc机制吧
      

  9.   


    ASI的代码是不用ARC的,所以