1. Introdução detalhada do AppDelegate:
Todo aplicativo para iPhone possui um UIApplication. UIApplication é o início do aplicativo para iPhone e é responsável por inicializar e exibir o UIWindow, e é responsável por carregar o primeiro UIView do aplicativo no formulário UIWindow. Outra tarefa do UIApplication é ajudar a gerenciar o ciclo de vida do aplicativo, e o UIApplication executa essa tarefa por meio de uma classe proxy chamada UIApplicationDelegate. Embora o UIApplicationDelegate seja responsável por receber eventos, o UIApplicationDelegate determina como o aplicativo responde a esses eventos.Os eventos que o UIApplicationDelegate pode manipular incluem eventos do ciclo de vida do aplicativo (como inicialização e desligamento do programa), eventos do sistema (como chamadas recebidas, avisos de notas), Este artigo apresentará como carregar o UIView do aplicativo no UIWindow e como usar UIApplicationDelegate para lidar com eventos do sistema.
- Antes do iOS13, AppDelegate era o único responsável por lidar com o ciclo de vida do aplicativo e o ciclo de vida da IU;
- Após o iOS13, as responsabilidades do AppDelegate são:
- Lidar com o ciclo de vida do aplicativo;
- O novo ciclo de vida da Sessão de Cena, o ciclo de vida da UI é entregue ao novo Delegado de Cena.
2. Introdução ao ciclo de vida da aplicação:
1. Situação da candidatura:
-
Não está em execução: Não está em execução, o programa não foi iniciado.
-
Inativo: Inativo, o programa está rodando em primeiro plano, mas não recebe nenhum evento, ou é ocupado à força por outras tarefas, como uma chamada repentina, o telefone bloqueia automaticamente a tela quando o programa está em primeiro plano, etc. O programa geralmente permanece neste estado sem manipulação de eventos.
-
Ativo: Ativado, o programa roda em primeiro plano e recebe eventos. Este também é um modo normal para a recepção.
-
Backgroud: O programa está em segundo plano, mas pode executar código. Depois que a maioria dos programas entra no estado de segundo plano, eles só permanecerão no estado de segundo plano por um período de tempo. Quando o tempo acabar, eles entrarão no estado suspenso (Suspenso) . Alguns programas podem permanecer no estado Backgroud por muito tempo sem entrar no estado suspenso (Suspenso) após solicitações especiais.
-
Suspenso: Suspenso, o programa não pode executar código em segundo plano. O sistema mudará automaticamente o programa em segundo plano para este estado sem emitir uma notificação. Quando suspenso, o programa ainda reside na memória. Quando a memória do sistema for insuficiente, o sistema limpará os programas travados para fornecer mais memória para os programas em primeiro plano.
[Falha na transferência de imagem do link externo. O site de origem pode ter um mecanismo anti-leeching. Recomenda-se salvar a imagem e carregá-la diretamente (img-ChHg12ht-1641890651119)(/Users/yichen/Library/Application Support/typora-user -imagens/image-20211224134019851 .png)]
2. Alguns métodos em AppDelegate
(1) terminará o lançamento :
//willFinishLaunching:程序将要完成启动。只在程序启动时执行一次。launchOptions:存存储程序启动的原因。
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
return YES;
}
(2) didFinishLaunching :
didFinishLaunching é o último estado executado antes do aplicativo exibir a interface para o usuário. Claro, podemos concluir algumas inicializações básicas neste método, mas deve ser uma operação de inicialização leve, caso contrário, o tempo de inicialização do programa será longo.
//didFinishLaunching是在app显示界面给用户之前最后执行的状态,理所当然我们可以在这个方法内完成一些基本的初始化,但是应该是轻量级的初始化操作,不然会导致程序启动时间长,影响用户体验。
//例如:
//不使用StoryBoard,需要配置window
//第三方登录sdk注册,以及很多第三方sdk的初始化配置
//判断程序接下来的业务逻辑,播不播放引导图片?播不播放开屏广告?有没有登录?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//若用户直接启动,launchOptions内无数据。
//若由其他程序通过openURL:启动。
//launchOptions中UIApplicationLaunchOptionsURLKey的数据为openURL:的参数url。
//launchOptions中UIApplicationLaunchOptionsSourceApplicationKey的数据为启动本程序的源程序的bundle ID(NSString)。
NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
if (url) {
[self launchOptionsWithURL:url];
}
NSString *bundleId = [launchOptions objectForKey:UIApplicationLaunchOptionsSourceApplicationKey];
if (bundleId) {
[self launchOptionsWithBundleId:bundleId];
}
//若由远程通知启动。
//launchOptions中UIApplicationLaunchOptionsRemoteNotificationKey对应数据为启动本程序的远程通知信息useinfo(NSDictionary)。
NSDictionary *useinfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (useinfo) {
[self launchOptionsWithUseinfo:useinfo];
}
return YES;
}
(3) DidBecomeActive :
DidBecomeActive : O programa foi ativado. Chamado quando o programa está em primeiro plano: quando o programa é iniciado pela primeira vez e quando retorna ao primeiro plano vindo do segundo plano.
Se o programa estava em segundo plano antes, você pode buscar novamente os dados e atualizar a interface do usuário neste método.
//程序第一次启动,从后台到前台时调用。
- (void)applicationDidBecomeActive:(UIApplication *)application {
//程序进入前台时,记录当前时间
}
(4) WillResignActive :
WillResignActive : O programa está prestes a ficar inativo. O programa é chamado quando está em primeiro plano: há uma chamada recebida, o telefone está bloqueado, etc. Se o programa for forçosamente ocupado por outras tarefas, este método será chamado, também chamado de método de interrupção.
- (void)applicationWillResignActive:(UIApplication *)application{
//程序准备进入后台通知相关VC 记录当前时间
}
(5) DidEnterBackground :
A função é:
- Liberar recursos compartilhados
- Salvar dados do usuário (gravar no disco rígido)
- anular temporizador
- Salve estado de programa suficiente para restaurar na próxima vez
//程序已经进入后台时调用
- (void)applicationDidEnterBackground:(UIApplication *)application {
//
}
**(6)WillEnterForeground **:
WillEnterForeground : O programa entrará em primeiro plano. Chamado quando o programa entra em primeiro plano vindo do plano de fundo. WillEnterForeground é usado principalmente para desfazer operações feitas em WillResignActive .
//程序将要进入前台。程序从后台进入前台时调用。
-(void)applicationWillEnterForeground:(UIApplication *)application {
}
(7) Terminará :
WillTerminate : O programa será encerrado. Chamado antes do encerramento do programa.
//目的就是为了保留一些重要的数据,方便下次启动后的恢复,达到一种让用户感觉该程序永远运行在后台从来没被终止过的感觉
- (void)applicationWillTerminate:(UIApplication *)application{
}
3. Período de tempo e sequência de interação
programa inicial:
- willFinishLaunchingWithOptions : Chamado apenas uma vez quando o programa é iniciado.
- didFinishLaunchingWithOptions : O programa foi iniciado e a interface será exibida. Executado apenas uma vez quando o programa é iniciado.
- DidBecomeActive : Chamado quando o programa está em primeiro plano: quando o programa é iniciado pela primeira vez e quando retorna ao primeiro plano vindo do segundo plano.
A recepção entra em segundo plano :
- WillResignActive : O programa está prestes a ficar inativo. O programa é chamado quando está em primeiro plano: há uma chamada recebida, o telefone está bloqueado, etc. Este método será chamado quando o programa for ocupado à força por outras tarefas, portanto, esse método também é chamado de método de chamada de interrupção do programa.
- DidEnterBackground : O programa entrou em segundo plano. Chamado quando o programa entra em segundo plano vindo do primeiro plano.
Entre na recepção pelo fundo :
- WillEnterForeground : O programa entrará em primeiro plano. Chamado quando o programa entra em primeiro plano vindo do plano de fundo.
- DidBecomeActive : Chamado ao retornar do plano de fundo para o primeiro plano.
Encerre o programa :
- WillTerminate : O programa será encerrado. Chamado antes do encerramento do programa.