首页 > GCD > iOS系统GCD学习(11):使用串行队列实现简单的预加载

iOS系统GCD学习(11):使用串行队列实现简单的预加载

  其主要思路是使用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;
}
  1. Trista 1月 9th, 2013 @ 11:46 | #1

    I’ve learn several excellent stuff here. Definitely value bookmarking for revisiting. I surprise how much effort you put to make the sort of great informative site.

  2. maillot foot enfant 4月 21st, 2013 @ 02:54 | #2

    Amazing! You know I love your blog!!!

  3. Omar 4月 22nd, 2013 @ 21:44 | #3

    When you think about it, that’s got to be the right aneswr.

评论提交中, 请稍候...

留言


可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Trackbacks & Pingbacks ( 0 )
  1. 还没有 trackbacks