GCD實(shí)戰(zhàn)一:使用串行隊(duì)列實(shí)現(xiàn)簡(jiǎn)單的預(yù)加載
本文為大家介紹了如何使用串行隊(duì)列實(shí)現(xiàn)簡(jiǎn)單的預(yù)加載,思路是使用gcd創(chuàng)建串行隊(duì)列,然后在此隊(duì)列中先后執(zhí)行兩個(gè)任務(wù):1.預(yù)加載一個(gè)viewController 2.將這個(gè)viewController推入。文章最后提供了源碼下載,希望對(duì)各位有所幫助。
其主要思路是使用gcd創(chuàng)建串行隊(duì)列,然后在此隊(duì)列中先后執(zhí)行兩個(gè)任務(wù):1.預(yù)加載一個(gè)viewController 2.將這個(gè)viewController推入
代碼如下:
- @implementation DWAppDelegate
- {
- dispatch_queue_t _serialQueue;
- UINavigationController *_navController;
- }
- - (dispatch_queue_t)serialQueue
- {
- if (!_serialQueue) {
- _serialQueue = dispatch_queue_create("serialQueue", DISPATCH_QUEUE_SERIAL);//創(chuàng)建串行隊(duì)列
- }
- return _serialQueue;
- }
- - (void)prepareViewController
- {
- dispatch_async([self serialQueue], ^{//把block中的任務(wù)放入串行隊(duì)列中執(zhí)行,這是第一個(gè)任務(wù)
- self.viewController = [[[DWViewController alloc] init] autorelease];
- sleep(2);//假裝這個(gè)viewController創(chuàng)建起來(lái)很花時(shí)間。。其實(shí)view都還沒(méi)加載,根本不花時(shí)間。
- NSLog(@"prepared");
- });
- }
- - (void)goToViewController
- {
- dispatch_async([self serialQueue], ^{//第二個(gè)任務(wù),推入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;
- }
工程下載: