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.

{% highlight objc %}
NSURL *url = [NSURL urlWithString:@""];
NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithURL:url
^(NSData *data, NSURLResponse *response, NSError *error) {
if (data) {
// Do stuff with the data
} else {
NSLog(@"Failed to fetch %@: %@", url, error);
[task resume];
{% endhighlight %}

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.