弹出控制器后网络请求返回
Network request comes back after the controller is popped
我在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, {...}),它将 运行 在另一个线程上使用。
并且在块中,您没有使用视图控制器的 属性 所以我认为没有内存泄漏的原因。
块已经被分派到队列中,因此它与视图控制器无关。
我在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, {...}),它将 运行 在另一个线程上使用。
并且在块中,您没有使用视图控制器的 属性 所以我认为没有内存泄漏的原因。
块已经被分派到队列中,因此它与视图控制器无关。