UIApplication
1、UIApplication文件
-
1.1 方法说明
复制
// 当程序载入后执行,应用程序启动入口 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { } // 应用程序将要进入非活动状态,即将进入后台 - (void)applicationWillResignActive:(UIApplication *)application { } // 当程序被推送到后台的时候调用 - (void)applicationDidEnterBackground:(UIApplication *)application { } // 当程序从后台将要重新回到前台时候调用 - (void)applicationWillEnterForeground:(UIApplication *)application { } // 当应用程序进入活动状态时执行 - (void)applicationDidBecomeActive:(UIApplication *)application { } // 当程序将要退出是被调用 - (void)applicationWillTerminate:(UIApplication *)application { } // 系统内存不足,需要进行清理工作 - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { } // 当系统时间发生改变时执行 - (void)applicationSignificantTimeChange:(UIApplication *)application { } // 当StatusBar框将要变化时执行 - (void)application:(UIApplication)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame { } // 当StatusBar框方向将要变化时执行 - (void)application:(UIApplication*)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration { } // 当通过url执行 - (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url { } // 当StatusBar框方向变化完成后执行 - (void)application:(UIApplication*)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation { } // 当StatusBar框变化完成后执行 - (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame { } // 当一个运行着的应用程序收到一个远程的通知 - (void)application:(UIApplication *) applicationdidReceiveRemoteNotification:(NSDictonary *) userinfo { } // 当一个应用程序成功的注册一个推送服务(APS) - (void)application:(UIApplication *) applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *) deviceToken { } // 当 APS无法成功的完成向 程序进程推送时 - (void)application:(UIApplication *) applicationdidFailToRegisterForRemoteNotificationsWithError:(NSError *) error { } // 当一个运行着的应用程序收到一个本地的通知 - (void)application:(UIApplication *) applicationdidReceiveLocalNotification:(UILocalNotification *)notification { }
-
1.2 调用场景
- ① 应用初次启动:
- - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- - (void)applicationDidBecomeActive:(UIApplication *)application
- ② 连续点击两次Home按钮
- - (void)applicationWillResignActive:(UIApplication *)application
- ③ 在任务栏点击SpringBoard或者按下Home按钮
- - (void)applicationDidEnterBackground:(UIApplication *)application
- ④ 在任务栏中回到app
- - (void)applicationDidBecomeActive:(UIApplication *)application
- ⑤ 单次点击Home按钮
- - (void)applicationWillResignActive:(UIApplication *)application
- - (void)applicationDidEnterBackground:(UIApplication *)application
- ⑥ 在SpringBoard中重新启动app
- - (void)applicationWillEnterForeground:(UIApplication *)application
- - (void)applicationDidBecomeActive:(UIApplication *)application
- ⑦ 从顶部向下滑动打开通知中心
- - (void)applicationWillResignActive:(UIApplication *)application
- ⑧ 移除通知中心
- - (void)applicationDidBecomeActive:(UIApplication *)application
- ⑨ 从底部向上滑动打开控制中心
- - (void)applicationWillResignActive:(UIApplication *)application
- ⑩ 移除控制中心
- - (void)applicationDidBecomeActive:(UIApplication *)application
- ⑪ 来电显示
- ① 应用初次启动:
2、main方法
-
2.1 main.m文件
int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } }
-
2.2 解释
- 作用:main 函数中只调用了一个 UIApplicationMain 的函数,整个程序的入口可以认为从 main 交给了 UIApplicationMain 函数。
- 函数原型:
UIKIT_EXTERN int UIApplicationMain(int argc, char *argv[], NSString * __nullable principalClassName, NSString * __nullable delegateClassName);
- argc, argv[]:与 main 的两个参数相同,一个是整形,一个是指针数组。
- principalClassName:委托方类名,这个类实时检测当前程序的运行状态,这个参数一定要是 UIApplication 类或其子类,如果参数为空 nil,默认为 UIApplication 。
- delegateClassName:代理方类名,遵守 UIApplicationDelegate 协议,实现协议中的方法,当第三个参数中的委托方检测到当前程序状态改变时会委托第四个参数在状态改变时执行相应的操作。
3、状态栏
// 获取状态栏高度
// returns CGRectZero if the status bar is hidden,默认高度为 20.0
CGFloat height = [UIApplication sharedApplication].statusBarFrame.size.height;
// 显示/隐藏状态栏
// 需在 Info.plist 添加 key:View controller-based status bar appearance,value:NO
// statusBarHidden:YES 隐藏,NO 显示(默认)
[UIApplication sharedApplication].statusBarHidden = NO;
// 设置状态栏颜色
// 需在 info.plist 添加 key:View controller-based status bar appearance,value:NO
// 在 iOS7 版本以前直接设置就可以
// UIStatusBarStyleDefault = 0, Dark content, for use on light backgrounds 黑色内容,默认
// UIStatusBarStyleLightContent = 1, Light content, for use on dark backgrounds 白色内容
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
// 风火轮旋转状态设置
// YES 开始旋转,NO 停止旋转(默认),停止时自动隐藏
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
4、UIApplication其他功能
//设置主界面icon上的数字图标,在2.0中引进, 缺省为0
[UIApplication sharedApplication].applicationIconBadgeNumber = 4;
// 摇动手势,是否支持redo undo操作。
// 3.0以后引进,缺省YES
[UIApplication sharedApplication].applicationSupportsShakeToEdit =YES;
// 判断程序运行状态,在2.0以后引入
/*
UIApplicationStateActive,
UIApplicationStateInactive,
UIApplicationStateBackground
*/
if([UIApplication sharedApplication].applicationState == UIApplicationStateInactive) {
NSLog(@"程序在运行状态");
}
// 阻止屏幕变暗,慎重使用, 因为非常耗电, 默认为NO
[UIApplication sharedApplication].idleTimerDisabled = YES;
// 显示联网标记 2.0
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
NSString* addressText = @"1 Infinite Loop, Cupertino, CA 95014";
// URL encode the spaces
addressText = [addressTextstringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSString *urlText = [NSStringstringWithFormat:@"http://maps.google.com/maps?q=%@", addressText];
[[UIApplication sharedApplication] openURL:[NSURLURLWithString:urlText]];
NSString *recipients = @"mailto:first@example.com?cc=second@example.com,third@example.com&subject=Hello from California!";
NSString *body = @"&body=It is raining in sunny California!";
NSString *email = [NSStringstringWithFormat:@"%@%@", recipients, body];
email = [emailstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURLURLWithString:email]];
// Call Google 411
[[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"tel://8004664411"]];
// Text to Google SMS
[[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"sms://466453"]];
// Lanuch any iPhone developers fav site
[[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"http://itunesconnect.apple.com"]];
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)