9.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 NSURL
Connection
. 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." ...
Get iOS 6 Programming Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.