IOS13 SceneDelegate详解

Xcode更新到11以后,新建项目,系统新增了一个SceneDelegate文件。

在ios13之前,APP的生命周期和UI生命周期是由Appdelegate全权负责的。


ios13之前

在ios13之后,这种状况发生了改变。
Appdelegate的职责是:
1、处理App生命周期
2、新的Scene Session生命周期

SceneDelegate的职责是:
1、处理UI生命周期

ios13之后

对于使用Xcode11创建新项目的开发者。初始化window方法需要作出改变。
不在Appdelegate的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions进行初始化,而转交给SceneDelegate的willConnectToSession:方法进行根控制器设置:

- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
    UIWindowScene *windowScene = (UIWindowScene *)scene;
    self.window = [[UIWindow alloc] initWithWindowScene:windowScene];
    self.window.frame = windowScene.coordinateSpace.bounds;
    self.window.rootViewController = [UITabBarController new];
    [self.window makeKeyAndVisible];
}

而对于需要适配ios13以下的设备,可以把相关的scenedelegate删掉。

1、删除 SceneDelegate 类文件
图1

2、删除info.plist中相关键值


图2

3、还原appdelegte中的window属性

图3

4、删除appdelegate 中 scene 相关方法

图4

综上,可以继续用原来的方式创建UI执行代码了。

你可能感兴趣的:(IOS13 SceneDelegate详解)