Ios 弹出控制器后,网络请求返回

Ios 弹出控制器后,网络请求返回,ios,objective-c,networking,httprequest,Ios,Objective C,Networking,Httprequest,我在viewcontroller中发出网络请求,简化代码如下: - (void)viewDidLoad { [super viewDidLoad]; [self http_request]; } - (void)http_request { dispatch_async(gAsynQueueT, ^{ NSString *response; NSURL *url = [NSURL URLWithString:@"http://

我在viewcontroller中发出网络请求,简化代码如下:

- (void)viewDidLoad {

    [super viewDidLoad];

    [self http_request];

}

- (void)http_request {

    dispatch_async(gAsynQueueT, ^{

        NSString *response;

        NSURL *url = [NSURL URLWithString:@"http://www.google.com"];

        ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

        sleep(5); //leave some time for poping this controller

        [request startSynchronous];

        NSError *error = [request error];

        if (!error) {

           response = [request responseString];

        }

        dispatch_async(gMainQueueT, ^{

            _data = response;  //_data is an global variable

        });

    });


}
在网络请求返回之前,我弹出了控制器。我认为这会导致内存泄漏,因为当网络请求返回时,控制器被释放。但我没发现仪器工具有什么问题


那么,如何解释这种情况呢。谢谢~

您已经使用了dispatch_async(gAsynQueueT,{…}),它将在另一个线程上运行

在块中,您并没有使用视图控制器的属性,所以我认为并没有内存泄漏的原因


块已分派到队列,因此它与视图控制器无关。

在主队列中,我为属于视图控制器的属性“data”赋值。确定后,当您在块中使用视图控制器时,iOS将保留视图控制器的强引用,视图控制器对象在弹出或关闭时不会被销毁,严格地说,在ARC内存管理中,对象的引用计数变为0时会被销毁,因此,如果您使用view controller的数据属性,它将被销毁,但不会被销毁,并且在运行主队列代码块后,它将被销毁,但您无法执行任何与UI相关的操作,因为它已被销毁。我理解。但是,到底谁持有引用,队列?是的,因此视图控制器引用被传递到http_request->gAsynQueueT->gMainQueueT,这就是块(其他语言中的ramda)强大的原因。如果我将视图控制器作为代理来响应网络请求如何。同样,我在网络恢复之前弹出控制器。这会引起一些问题吗?