iOS系统GCD学习(11):使用串行队列实现简单的预加载
2013-01-10 22:16
736 查看
其主要思路是使用gcd创建串行队列,然后在此队列中先后执行两个任务:
1.预加载一个viewController
2.将这个viewController推入
代码如下:
1.预加载一个viewController
2.将这个viewController推入
代码如下:
@implementation DWAppDelegate { dispatch_queue_t _serialQueue; UINavigationController *_navController; } - (dispatch_queue_t)serialQueue { if (!_serialQueue) { _serialQueue = dispatch_queue_create("serialQueue", DISPATCH_QUEUE_SERIAL);//创建串行队列 } return _serialQueue; } - (void)prepareViewController { dispatch_async([self serialQueue], ^{//把block中的任务放入串行队列中执行,这是第一个任务 self.viewController = [[[DWViewController alloc] init] autorelease]; sleep(2);//假装这个viewController创建起来很花时间。。其实view都还没加载,根本不花时间。 NSLog(@"prepared"); }); } - (void)goToViewController { dispatch_async([self serialQueue], ^{//第二个任务,推入viewController NSLog(@"go"); dispatch_async(dispatch_get_main_queue(), ^{//涉及UI更新的操作,放入主线程中 [_navController pushViewController:self.viewController animated:YES]; }); }); } - (void)dealloc { dispatch_release(_serialQueue); [_navController release]; [_window release]; [_viewController release]; [super dealloc]; } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self prepareViewController]; self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; // Override point for customization after application launch. DWViewController *viewController = [[[DWViewController alloc] initWithNibName:@"DWViewController" bundle:nil] autorelease]; viewController.view.backgroundColor = [UIColor blueColor]; _navController = [[UINavigationController alloc] initWithRootViewController:viewController]; self.window.rootViewController = _navController; [self goToViewController]; [self.window makeKeyAndVisible]; return YES; }
相关文章推荐
- GCD实战一:使用串行队列实现简单的预加载
- iOS学习笔记10(5)—GCD实战一:使用串行队列实现简单的预加载
- 深入GCD(四):使用串行队列实现简单的预加载
- GCD实战一:使用串行队列实现简单的预加载
- GCD实战练习:使用串行队列实现简单的预加载
- GCD实战一:使用串行队列实现简单的预加载
- GCD实战一:使用串行队列实现简单的预加载
- GCD实战一:使用串行队列实现简单的预加载
- GCD实战一:使用串行队列实现简单的预加载
- GCD实战一:使用串行队列实现简单的预加载
- GCD实战一:使用串行队列实现简单的预加载
- GCD实战一:使用串行队列实现简单的预加载
- GCD实战一:使用串行队列实现简单的预加载
- iOS 【Multithreading-GCD 同步/异步函数 和 串行/并发队列 的6种搭配使用及介绍】
- iOS简单优雅的实现复杂情况下的串行需求(各种锁、GCD 、NSOperationQueue...)
- Java基础课程学习总结,使用LinkedList简单模拟队列数据结构和堆栈数据结构的实现
- iOS学习笔记74-IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别附代码
- iOS学习笔记4-GCDAsyncUdpSocket的使用(实现异步发送接收数据)
- iOS-多线程编程学习之GCD——串行队列和并发队列(五)
- iOS-GCD的串行队列和并行队列的任务及实现