GCD實戰一:使用串行隊列實現簡單的預加載
作者:佚名
本文為大家介紹了如何使用串行隊列實現簡單的預加載,思路是使用gcd創建串行隊列,然后在此隊列中先后執行兩個任務:1.預加載一個viewController 2.將這個viewController推入。文章最后提供了源碼下載,希望對各位有所幫助。
本文為大家介紹了如何使用串行隊列實現簡單的預加載,思路是使用gcd創建串行隊列,然后在此隊列中先后執行兩個任務:1.預加載一個viewController 2.將這個viewController推入。文章最后提供了源碼下載,希望對各位有所幫助。
其主要思路是使用gcd創建串行隊列,然后在此隊列中先后執行兩個任務: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;
- }
工程下載:
責任編輯:閆佳明
來源:
dreamingwish