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

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

[[77418]]

本文为大家介绍了如何使用串行队列实现简单的预加载,思路是使用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

责任编辑:闫佳明 来源: dreamingwish
相关推荐

2013-07-15 16:55:54

iOS多线程GCD实战资源竞争

2013-07-15 15:23:03

iOS多线程GCD

2021-09-08 22:28:13

前端Css3动画

2017-04-27 10:07:52

框架设计实现

2024-06-17 08:26:23

性能ViewPager页面

2011-01-17 19:35:04

javascriptjqueryweb

2011-03-17 10:37:07

JavaScript

2009-04-11 15:12:24

Windows CE串行通信GPS

2022-01-15 07:20:18

Redis List 消息队列

2021-11-02 15:35:01

JavaScriptCSS开发

2021-04-28 10:01:00

JSCSS进度条

2024-03-22 12:10:39

Redis消息队列数据库

2022-01-21 19:22:45

RedisList命令

2021-03-01 23:31:48

队列实现栈存储

2022-01-04 16:50:47

JavaScript图片网站

2011-08-05 16:41:48

iOS 队列 内存

2023-09-12 14:58:00

Redis

2015-03-10 13:55:31

JavaScript预解析原理及实现

2021-08-04 09:51:02

代理设计模式

2023-04-18 23:44:54

性能优化开发preload
点赞
收藏

51CTO技术栈公众号