O'Reilly logo

iOS 7 Programming Cookbook by Vandad Nahavandipoor

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

11.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." ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required