1、前提是没开启ARC,一些aotorelease对象在超出它本身所在块的范围之后被使用,会引起程序crash:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
__block NSURLResponse *response = nil;__block NSError *error = nil;
__block NSData *receiveData = nil;
NSURLRequest *request = [self gcdHelperRequest:&error];
if (request)
{
receiveData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; //(1)
NSLog(@"receiveData:%@", receiveData); //(2)
}
if (self.gcdHelperServiceBlock)
{
dispatch_async(dispatch_get_main_queue(), ^{
self.gcdHelperServiceBlock(response, error, receiveData); //(3)
});
}
});
这段代码是有问题的,(1)处有问题,(2)处可以正常打印数据,(3)处程序挂了。
改正:receiveData =[ [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error] retain];