[置顶] GCD的使用

时间:2021-03-18 05:15:51

AppDelegate.m

#import "AppDelegate.h"
#import "UIImageView+Download.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];

//使用GCD完成课堂实例1
// UIImageView *imgView = [[UIImageView alloc] initWithFrame:self.window.bounds];
// NSURL *url = [NSURL URLWithString:@"http://h.hiphotos.baidu.com/image/pic/item/10dfa9ec8a136327f5fb6544938fa0ec08fac7b7.jpg"];
// [imgView loadImgWithUrl:url];
//
// [self.window addSubview:imgView];
// [imgView release];

//演示GCD延迟调用
double delayInSeconds = 2.0;
CFAbsoluteTime first = CFAbsoluteTimeGetCurrent();
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));

dispatch_after(popTime, dispatch_get_main_queue(), ^{
NSLog(@"dispatch_after:%lf",CFAbsoluteTimeGetCurrent() - first);
});

//dispatch_set_target_queue 使用
dispatch_queue_t serialQueue = dispatch_queue_create("com.wxhl.serial", NULL);

dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);

//把serialQueue的优先级设置成跟globalQueue一样
//第一个参数为需要变更优先级的queue,第二个参数就是参照Queue
dispatch_set_target_queue(serialQueue, globalQueue);

dispatch_release(serialQueue);

return YES;
}



@end

UIImageView + Download.h

@interface UIImageView (Download)

- (void)loadImgWithUrl:(NSURL *)url;

UIImageView + Download.m

- (void)loadImgWithUrl:(NSURL *)url
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *img = [UIImage imageWithData:data];

dispatch_async(dispatch_get_main_queue(), ^{
self.image = img;
});
});


}