其主要思路是使用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. CSS3 Flexbox轻松实现元素的水平居中和垂直居中
  2. Symantec Backup Exec Agent For Linux防火墙问题
  3. java设计模式之策略模式
  4. 每天一个Linux命令(3):pwd命令
  5. IE中无法执行JS脚本 解决WINDOWS SERVER 2008弹出INTERNET EXPLORER增强安全配置正在阻止来自下列网站的内容
  6. express 4.x 模板引擎与express.static
  7. zabbix图形乱码
  8. slf4j 与各个 logging框架的适配器说明
  9. 海量数据挖掘MMDS week3:社交网络之社区检测:基本技巧
  10. bzoj4671: 异或图
  11. zabbix/自动发现规则
  12. java多线程系列8 高级同步工具(2)CountDownLatch
  13. vs get set快捷键
  14. 【PyQt5-Qt Designer】PyQt5+eric6 安装和配置
  15. 解析oui.txt文件,通过MAC前缀获取Organization
  16. 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
  17. docker下 klee第一个测试
  18. 腾讯云 利用php + apache + mysql 搭建服务器环境
  19. C# 使用Vici WinService组件来创建Windows服务
  20. SpringQuartz定时任务cronExpression配置

热门文章

  1. Windows平台下使用vs code搭建python3环境(1)
  2. [LUOGU] P2759 奇怪的函数
  3. easyUI 之datagrid 在前端自定义排序
  4. (65)login as guest zabbix无法进入登陆界面
  5. hosts设置本地虚拟域名
  6. python--FTP 上传视频示例
  7. Python中的序列化以及pickle和json模块介绍
  8. IntelliJ IDEA 类和方法注释的生成以及Javadoc的简单使用记录
  9. PYDay3-初识python
  10. Linux 文件/文件夹重命名