@interface ViewController : UIViewController @property (nonatomic,strong)void (^loggerBlock)(void); @end - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; // GCD极大的方便了多线程编程,应该尽可能使用GCD来处理后台线程和UI线程的交互 // block的定义 调用 [self block]; // 修改block以外的变量 [self ModifyBlock]; // 系统提供的dispatch方法 [self dispatch]; // 自定义queue,用dispatch_queue_create [self configQueue]; // 高级用法 两个线程后台并行运行,等到两个线程都结束后,在汇总执行结果 [self advancedDispatch]; //延长应用在后台运行事件,在Appdelegate设置 } -(void)block { _loggerBlock = ^{ NSLog(@"HelloWorld"); }; //延时操做 dispatch_time_t deleyTime = dispatch_time(DISPATCH_TIME_NOW, 5.0 *NSEC_PER_SEC); dispatch_after(deleyTime, dispatch_get_main_queue(), ^{ NSLog(@"延时调用"); // 调用 _loggerBlock(); }); } -(void)ModifyBlock { __block int a = 0; void (^foo)(void) =^{ a = 1; NSLog(@"%d",a); }; foo(); } -(void)dispatch { //后台执行: dispatch_async(dispatch_get_global_queue(0, 0), ^{ //something }); //主线程执行 dispatch_async(dispatch_get_main_queue(), ^{ //something }); // 一次性执行 通常用在单例线程安全模式 static dispatch_once_t onceTaken; dispatch_once(&onceTaken,^{ //Tools *t = [Tools alloc]init]; }); // 延迟执行 double delayInTime = 2.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInTime * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^{ //在主线程延迟执行的事件 }); } -(void)configQueue { dispatch_queue_t urls_queue = dispatch_queue_create("http://my.oschina.net/u/2319073/admin/new-blog", NULL); dispatch_async(urls_queue, ^{ // your coder }); // dispatch_release(urls_queue); } -(void)advancedDispatch { //分段下载进度条 dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{ //并行执行的线程一 }); dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{ //并行执行的线程二 }); dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{ //汇总结果 }); } // #import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (nonatomic,strong)void (^loggerBlock)(void); @end - (void)applicationDidEnterBackground:(UIApplication *)application { [self beingBackgroundUpdateTask]; // 须要长久运行的代码 [self endBackgroundUpdateTask]; } #pragma 延长后台运行时间 -(void)beingBackgroundUpdateTask { self.backgroundUpdateTask = [[UIApplication sharedApplication]beginBackgroundTaskWithExpirationHandler:^{ [self endBackgroundUpdateTask]; }]; } -(void)endBackgroundUpdateTask { [[UIApplication sharedApplication] endBackgroundTask:self.backgroundUpdateTask]; self.backgroundUpdateTask = UIBackgroundTaskInvalid; }