SceneDelegate

665 阅读1分钟

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

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

截屏2021-06-05 下午3.32.57.png

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

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

截屏2021-06-05 下午3.33.04.png

对于使用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 类文件

截屏2021-06-05 下午3.33.16.png

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

截屏2021-06-05 下午3.42.35.png

3、还原appdelegte中的window属性

截屏2021-06-05 下午3.33.31.png

4、删除appdelegate 中 scene 相关方法

截屏2021-06-05 下午3.33.40.png

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