iOS13生命周期的改动
不知不觉Xcode就,从xcode 7 升级到xcode12了,突然发现,用最新的Xcode12新建一个项目后,AppDelegate里面的window没了,还多了一些UISceneSession lifecycle,一脸懵逼了,然后在网上查找了资料参考了好几篇大神的文章才发现了变化.
iOS 13以下生命周期
对应到方法就是一些AppDelegate里头的方法以及一些可以注册监听的通知.然而,到了iOS 13这些都失效了.
以上两幅图都是从其他大神那,参考来的,虽然看不懂,没那么深入了解过,就当是看看了解一下了.看不懂也不要紧,只要知道iOS 13 改变了什么就好,即---原本AppDelegate(UIApplicationDelegate)控制生命周期的行为移交给了SceneDelegate(UIWindowSceneDelegate)如果直接使用最新的Xcode创建一个新的App.我们会发现.Appdelegate.m内代码少了一些生命周期的东西,多了一些其他的代码.并且多了一个SceneDelegate的类
苹果文档如是说
In iOS 13 and later, use UISceneDelegate objects to respond to life-cycle events in a scene-based app.
iOS 13及更高版本,使用SceneDelegate对象在基于场景的应用程序中响应生命周期事件。
In iOS 12 and earlier, use the UIApplicationDelegate object to respond to life-cycle events.
在ios 12及更早版本中,使用UIApplicationDelegate对象响应生命周期事件。
也就是说如果不想使用场景,要用回以前的写window的风格就不在info.plist中添加UIApplicationSceneManifest.或者是Xcode11以上的删除UIApplicationSceneManifest(Application Scene Manifest).以及appdelegate.m中注释掉scene有关的代码.还有,在Appdelegate.h中添加一个window属性
@property (strong, nonatomic) UIWindow * window;
然后就走的以前的Appdelegate的那些方法了,用不习惯这个场景这个功能的就可以按以上方法改回以前在Appdelegate 中创建window使用
补充说明一下,如果不使用iPad的多窗口的话建议大家不要使用场景.
以上内容中整理的素材图片来源于不同文章的大神参考梳理而来,如有雷同尽情谅解.