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

时间:2015-10-08 10:31:19

标签: 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://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

        });

    });


}

在网络请求回来之前,我弹出了控制器。我认为这应该导致内存泄漏,导致网络请求返回时控制器被释放。但我发现仪器工具没有错。

那么,如何消除这种情况。感谢〜

1 个答案:

答案 0 :(得分:2)

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

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

块已经被分派到队列中,所以它无论如何都与视图控制器无关。