首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何等待加载ViewController,直到appdelegate函数申请完成

在iOS开发中,可以通过等待加载ViewController直到AppDelegate函数申请完成的方式来实现延迟加载的效果。以下是一种常见的实现方法:

  1. 在AppDelegate类中,声明一个布尔类型的属性,用于标记申请是否完成。例如:
代码语言:swift
复制
var isRequestCompleted = false
  1. 在需要等待加载的ViewController中,可以使用一个循环来等待AppDelegate函数申请完成。例如,在viewDidLoad方法中:
代码语言:swift
复制
override func viewDidLoad() {
    super.viewDidLoad()
    
    // 循环等待申请完成
    while !((UIApplication.shared.delegate as? AppDelegate)?.isRequestCompleted ?? false) {
        RunLoop.current.run(mode: .default, before: Date.distantFuture)
    }
    
    // 申请完成后执行相应操作
    // ...
}
  1. 在AppDelegate中的相应函数中,当申请完成时,将isRequestCompleted属性设置为true。例如,在application(_:didFinishLaunchingWithOptions:)方法中:
代码语言:swift
复制
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // 进行申请操作
    // ...
    
    // 申请完成后设置标记
    isRequestCompleted = true
    
    return true
}

这样,当AppDelegate函数申请完成后,ViewController中的循环将结束,继续执行后续操作。

需要注意的是,这种方式可能会导致界面卡顿,因为循环等待会阻塞主线程。因此,建议在实际开发中,根据具体需求和场景选择合适的延迟加载方式,例如使用异步操作、回调函数等。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS App 启动性能优化

加载、view及其subviews的加载 applicationWillFinishLaunching的耗时 如果有这样这样的代码: //AppDelegate.m @implementation AppDelegate...答案是: -[MQQTabBarController viewDidLoad] -[MQQTab1ViewController viewDidLoad] -[AppDelegate application...应该在400ms内完成main()函数之前的加载 整体过程耗时不能超过20秒,否则系统会kill掉进程,App启动失败 400ms内完成main()函数前的加载的建议值是怎样定出来的呢?...我认为应该首先把启动过程分为四个部分: main()函数之前 main()函数之后至applicationWillFinishLaunching完成 App完成所有本地数据的加载并将相应的信息展示给用户...App完成所有联网数据的加载并将相应的信息展示给用户 1+2一起决定了我们需要用户等待多久才能出现一个主视图,同时也是技术上可以精确测量的时长,1+2+3决定了用户视觉上的等待出现有用信息所需要的时长

2.2K92

iOS性能优化之启动优化

当数据加载到页表中,系统会配合CPU进行地址翻译,然后载入到物理内存中。地址翻译的过程,由CPU上的内存管理单元(MMU)完成 页表中记录了内存页的状态、虚拟内存和物理内存的对应关系。...其中状态分为:未分配(Unallocated)、未缓存(Uncached)和已缓存(Cached) 未分配的内存页,是没有被进程申请使用的,也就是空闲的虚拟内存,不占用虚拟内存磁盘的任何空间 未缓存的内存页...0x00000048 [ 1] -[ViewController viewDidLoad] 0x100005FF4 0x0000007C [ 2] -[AppDelegate application...[ 2] +[AppDelegate load] 0x100005FAC 0x0000009C [ 3] _main 0x100006048 0x00000048 [ 1] -[ViewController...但真正的难点是,如何能找到项目中启动时需要调用的所有方法和函数 5. Clang插庄 在项目中,对于OC方法,可以对objc_msgSend方法进行HOOK。

1.8K11
  • Mac开发基础练习:制作一个状态栏(NSStatusBar)上的App(二)

    活动监视器显示demo运行正常 这是由于我们之前使用的xib文件加载window,系统为我们默认做了一些其他方面的事,比如再加载window之前,创建应用对象,设置应用代理,配置窗口设置等,那系统是在哪里做的这些事情呢...其实是在main.m文件里的调用了系统的NSApplicationMain()这个重要的函数,这个函数屏蔽了很多细节,这对新入门的来说是件好事,可以很容易的进行业务代码的工作而不必关系系统启动的细节;但如果我们需要研究系统在启动时的一些行为时...像iOS中一样,应用启动加载完成后,设置UI是从AppDelegate的这个方法-applicationDidFinishLaunching:开始的,如果我们在上面的工程中对这个方法设置调试断点,你会发现应用启动后...main.m文件实现代码 1.6 因为我们去除了window,因此ViewController对我们来说已经没有价值了,我们只需要把之前在ViewController中写的代码,放置到AppDelegate.m...中来实现就可以了,这样我们就可以删除ViewController这个类了。

    1.4K30

    iOS-UIWindow详解

    (argc, argv, nil, NSStringFromClass([AppDelegate class])); } } 此时我们可以根据UIApplicationMain函数了解程序启动的过程...Main Interface 中 Main删除 此时我们基本可以想到,UIWindow应该是在加载storyboard的时候系统创建的,那么系统是如何加载storyboard的呢?...系统在加载storyboard的时候会做以下三件事情 创建窗口 加载mian.storyboard 并实例化view controller 分配新视图控制器到窗口root viewcontroller...因此,当系统加载完info.plist,判断后发现没有main,就不会加载storyboard,也就不会帮我们创建UIWindow,那么我们需要自己在程序启动完成的时候也就是在didFinishLaunchingWithOptions...首先根据系统加载storyboard时做的三件事情,我们可以总结出UIWindow创建步骤 创建窗口对象 创建窗口的根控制器,并且赋值 显示窗口 并且我们在AppDelegate.h中发现属性window

    2K40

    iOS项目——项目开发环境搭建

    那么系统是怎么判断我们是如何设置主界面的呢?这个问题就涉及到一部分启动流程的问题。   ...我们都知道,项目运行的起点是main函数,在我们的iOS项目中也不例外,我们可以看到,项目中有一个main.m主函数,这里面只有一个方法就是我们的main方法,代码如下,很简单。...  这个主函数的作用主要是有以下四点,最后一点则告诉我们系统是如何选择我们设置了主界面的。...创建Application对象 创建AppDelegate对象,并且设置成为Application对象的代理属性 开启主循环,目的是让程序一直跑起来 加载info.plist文件,判断下info.plist...自行创建主界面,这个需要再我们的AppDelegate完成,具体代码如下: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions

    1.5K150

    已有iOS工程中加入Flutter之Cocoapods+Flutter环境方式集成

    // 当在AppDelegate中创建的FlutterEngine上调用run时,默认Dart库的默认main()入口点函数将运行。...#import "ViewController.h" #import "AppDelegate.h" @import Flutter; @interface ViewController () @end...当然你也可以使用下面的方法跳转 //[self presentViewController:flutterVC animated:YES completion:nil]; } 至此,我们就已经可以完成原生集成...Flutter,并且完成跳转的工作了,效果如下: image.png 另外,官方还给了另外一种使用隐式FlutterEngine的方式创建FlutterViewController,这种方式,我们不需要预先创建...// 当在AppDelegate中创建的FlutterEngine上调用run时,默认Dart库的默认main()入口点函数将运行。

    2.4K30

    iOS-控制器View的创建和生命周期

    通过storyboard创建的控制器,或者通过xib创建的控制器的view,系统会帮我们加载控制器的view,具体内部实现可以看iOS-UIWindow详解,在此不在赘述 ViewController...: 控制器的view布局子控件完成 viewDidAppear: 控制器的view完全显示 viewWillDisappear: 控制器的view即将消失的时候...控制器View的延迟加载 控制器的view是延迟加载的:创建控制器并不一定会创建控制器的view,等用到时再加载 下面我们通过一个小的程序来验证一下 AppDelegate.m - (BOOL)application...import "ViewController.h" @interface ViewController () @end @implementation ViewController // 自定义控制器的...mainScreen].bounds]; view.backgroundColor = [UIColor greenColor]; self.view = view; } // 控制器的view加载完成的时候调用

    1.4K60

    iOS程序猿如何快速掌握 PHP,化身全栈攻城狮?

    下载完成后,双击安装.安装成功后,选择 Mange Servers-->Start All启动本地服务器.启动成功后,在浏览器中输入 http://localhost,就可以看到一个默认的PHP页面....然后你还需要下载一款PHP编辑器,此时我使用Github的Atom编辑器.个人感觉界面很舒适,代码高亮看着也很舒服,你可以到这里下载: https://atom.io.下载完成后,点击安装即可....AppDelegate 入口文件 iOS应用通常是以 AppDelegate 文件作为编码的起始(准确说的是 main.m,在此不细究).在PHP中,你可以使用一个 index.php 文件作为你的 php...model;V,即视图View,更直接地说是显示数据,为了简化讨论,我们此处仅对移动端开发常用的JSON格式数据的显示作一实现;C,即Controller控制器,也就是我们常说的视图控制器,下面会具体讨论如何在...,语法是 new 类名(),这不禁让我想起 oc 中的 new函数,它的语法是: [类名 new]; php 中的函数,看起来更像是C语言函数,也许说更像 oc 中的block,可能更好理解些. php

    1.8K71
    领券