OC高级编程-IOS与OS_X多线程和内存管理--4.ARC、Blocks、GCD使用范例

从指定的URL下载数据,在另外的线程中解析该数据并在主线程中使用其解析结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
NSString *url = @"http://i.mages.apple.com/jp/iphone/features/includes/camera-gallery/03-20100607.jpg";

/*
* 在主线程中,从指定的URL开始异步网络下载
*/
[ASyncURLConnection request:url completeBlock:^(NSData *data){
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
//在Global Dispatch Queue 中对下载的数据进行解析处理。
//不妨碍主线程可长时间处理
dispatch_async(dispatch_get_main_queue(), ^{
//在Main Dispatch Queue 中使用解析结果。
//对用户界否进行反映处理
});
});
} errorBlock:^(NSError *error){
//发生错误
NSLog(@"error %@", error);
}];

网络编程强烈推荐使用异步API.
对于网络编程可以断言“线程是魔鬼”

  如果在网络编程中使用线程, 就很可能会产生大量使用线程的倾向,会引发很多问题。
  例如每个连接都使用线程,很快就会用尽线程栈内存等。
  因为Cocoa 框架提供了用于异步网络通信的API,所以在网络编程中不可使用线程。务必使用用于异步网络通信的API 。

0%