8.3. Downloading Synchronously with NSURLConnection
Problem
You want to download the contents of a URL, synchronously.
Solution
Use the sendSynchronousRequest:returningResponse:error:
class method of NSURLConnection. The return value of this
method is data of type NSData.
Discussion
Using the sendSynchronousRequest:returningResponse:error:
class method of NSURLConnection, we
can send a synchronous request to a URL. Now remember! Synchronous connections
do not necessarily block the main thread.
Synchronous connections block the current thread
and if the current thread is the main thread, then the main thread
will be blocked. If you go on a global concurrent queue with GCD and
then initiate a synchronous connection, then you are
not blocking the main thread.
Let’s go ahead and initiate our first synchronous connection and see what happens. In this example, we will try to retrieve the home page of Yahoo!’s US website:
- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ NSLog(@"We are here..."); NSString *urlAsString = @"http://www.yahoo.com"; NSURL *url = [NSURL URLWithString:urlAsString]; NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; NSURLResponse *response = nil; NSError *error = nil; NSLog(@"Firing synchronous url connection..."); NSData *data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error]; if ([data length] > 0 && error == nil){ NSLog(@"%lu bytes of data was returned.", ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access