iOS Development Journal

Tips and Tricks Learned the Hard Way

Asynchronous Networking With NSURLSession

iOS 7 introduces an entire new networking stack for developers, NSURLSession. Generally it makes the common tasks simple, and the hard tasks possible. It also drives the new background fetch capabilities as well.

Like my earlier post, offloading your networking from the main thread is a simple way to help keep an app responsive. Doing this with NSURLSession is actually quite easy.

1
2
3
4
5
6
7
8
9
10
11
NSURL *url = [NSURL urlWithString:@"http://iosdevelopmentjournal.com"];
NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithURL:url
                                                     completionHandler:
                          ^(NSData *data, NSURLResponse *response, NSError *error) {
    if (data) {
        // Do stuff with the data
    } else {
        NSLog(@"Failed to fetch %@: %@", url, error);
    }
}];
[task resume];

This will run the networking off of the main thread, and the callback will come from a system network queue. Generally this is what we want. If you want to have control over what queue the callback comes from, or to be able to handle authentication requests, you should create your own NSURLSession and delegate.