|
|
|
|
移动端

GCD实战一:使用串行队列实现简单的预加载

本文为大家介绍了如何使用串行队列实现简单的预加载,思路是使用gcd创建串行队列,然后在此队列中先后执行两个任务:1.预加载一个viewController 2.将这个viewController推入。文章最后提供了源码下载,希望对各位有所帮助。

作者:佚名来源:dreamingwish|2013-07-15 16:39

年前最后一场技术盛宴 | 1月27日与京东、日志易技术大咖畅聊智能化运维发展趋势!


本文为大家介绍了如何使用串行队列实现简单的预加载,思路是使用gcd创建串行队列,然后在此队列中先后执行两个任务:1.预加载一个viewController 2.将这个viewController推入。文章最后提供了源码下载,希望对各位有所帮助。

其主要思路是使用gcd创建串行队列,然后在此队列中先后执行两个任务:1.预加载一个viewController 2.将这个viewController推入

代码如下:

  1. @implementation DWAppDelegate 
  2.     dispatch_queue_t _serialQueue; 
  3.     UINavigationController *_navController; 
  4.  
  5. - (dispatch_queue_t)serialQueue 
  6.     if (!_serialQueue) { 
  7.         _serialQueue = dispatch_queue_create("serialQueue", DISPATCH_QUEUE_SERIAL);//创建串行队列 
  8.     } 
  9.     return _serialQueue; 
  10.  
  11. - (void)prepareViewController 
  12.     dispatch_async([self serialQueue], ^{//把block中的任务放入串行队列中执行,这是第一个任务 
  13.         self.viewController = [[[DWViewController alloc] init] autorelease]; 
  14.         sleep(2);//假装这个viewController创建起来很花时间。。其实view都还没加载,根本不花时间。 
  15.         NSLog(@"prepared"); 
  16.     }); 
  17.  
  18. - (void)goToViewController 
  19.     dispatch_async([self serialQueue], ^{//第二个任务,推入viewController 
  20.         NSLog(@"go"); 
  21.         dispatch_async(dispatch_get_main_queue(), ^{//涉及UI更新的操作,放入主线程中 
  22.             [_navController pushViewController:self.viewController animated:YES]; 
  23.         }); 
  24.     }); 
  25.  
  26. - (void)dealloc 
  27.     dispatch_release(_serialQueue); 
  28.     [_navController release]; 
  29.     [_window release]; 
  30.     [_viewController release]; 
  31.     [super dealloc]; 
  32.  
  33. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
  34.     [self prepareViewController]; 
  35.     self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
  36.     // Override point for customization after application launch. 
  37.     DWViewController *viewController = [[[DWViewController alloc] initWithNibName:@"DWViewController" bundle:nil] autorelease]; 
  38.     viewController.view.backgroundColor = [UIColor blueColor]; 
  39.     _navController = [[UINavigationController alloc] initWithRootViewController:viewController]; 
  40.     self.window.rootViewController = _navController; 
  41.     [self goToViewController]; 
  42.     [self.window makeKeyAndVisible]; 
  43.     return YES; 
  44. }

工程下载:

http://down.51cto.com/data/872207

【编辑推荐】

  1. iOS多线程编程知多少
  2. GCD介绍(一):基本概念和Dispatch Queue
  3. GCD介绍(二):多核心的性能
  4. GCD介绍(三):Dispatch Sources
  5. GCD介绍(四):完结
【责任编辑:milk TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

《ASP.NET AJAX Web 应用开发秘诀(VB版)》

本书详细介绍了AJAX在Web开发上的应用。主要内容包括:ASP.NET AJAX技术概述、实现异步局部更新页面、UpdatePanel编程功能、PageRequestMan...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊