iOS Application

认识UIApplication

  • UIApplication是应用程序的象征
  • 每一个应用都有自己的UIApplication对象,而且是单例的
  • 通过[UIApplication shareApplication]可以获取单例对象
  • 一个程序启动后创建的第一个对象就是UIApplication对象
  • 利用UIApplication对象,可以进行一些应用级别操作

UIApplication的常用属性

  • 设置App图标右上角提醒数字
@property(nonatomic) NSInteger applicationIconBadgeNumber;

iOS 10前的使用方式

    UIApplication *app = [UIApplication sharedApplication];
    //App图标右上角数字
    app.applicationIconBadgeNumber = 12;
    
    UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];
    //需要注册通知对象
    [app registerUserNotificationSettings:setting];

iOS 10后的使用方式

    UIApplication *app = [UIApplication sharedApplication];
    //App图标右上角数字
    app.applicationIconBadgeNumber = 12;
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    [center requestAuthorizationWithOptions:UNAuthorizationOptionBadge completionHandler:^(BOOL granted, NSError * _Nullable error) {
        
    }];
  • 联网指示器的可见性
@property(nonatomic,getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible __TVOS_PROHIBITED; // showing network spinning gear in status bar. default is NO
app.networkActivityIndicatorVisible = YES;
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        app.networkActivityIndicatorVisible = NO;
    });
  • 设置状态栏
@property(readwrite, nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController prefersStatusBarHidden]") __TVOS_PROHIBITED;

iOS 9以后使用prefersStatusBarHidden方法隐藏状态栏

- (BOOL)prefersStatusBarHidden{
    return YES;
}
  • openURL调用打电话,发短信,发邮件,打开网页等功能
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://123456"] options:0 completionHandler:^(BOOL success) {
}];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.baidu.com"] options:0 completionHandler:^(BOOL success) {
}];

UIApplication的代理方法AppDelegate

//App启动完毕的时候调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSLog(@"App启动完毕的时候调用");
    return YES;
}

//当App失去焦点的时候调用
- (void)applicationWillResignActive:(UIApplication *)application {
    //当应用程序即将从活动状态转移到非活动状态时发送。这可能发生在某些类型的临时中断(如来电或SMS消息)或用户退出应用程序并开始过渡到后台状态时。
    //使用此方法暂停正在进行的任务,禁用计时器,并使图形呈现回调失效。游戏应该使用这种方法暂停游戏。
    NSLog(@"App失去焦点");
}

//App进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application {
   //使用此方法释放共享资源、保存用户数据、使计时器失效,并存储足够的应用程序状态信息,以便在以后终止应用程序时将其恢复到当前状态
    NSLog(@"App已经进入后台");
}

//App将要从后台进入前台的时候调用
- (void)applicationWillEnterForeground:(UIApplication *)application {
    NSLog(@"App将要后台进入前台的时候调用");
}

//当App完全获取到焦点的时候调用,只有当App完全获取到焦点,才能与用户交互
- (void)applicationDidBecomeActive:(UIApplication *)application {
    NSLog(@"App完全获取到焦点");
}

//当应用程序即将终止时调用。如果适当的保存数据
- (void)applicationWillTerminate:(UIApplication *)application {
    NSLog(@"应用程序即将终止时调用");
}

//App接收到内存警告的时候调用
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application{
    NSLog(@"App内存警告");
}

main()函数的UIApplicationMain函数底层实现

int main(int argc, char * argv[]) {
    @autoreleasepool {
        //第三个参数:UIApplication的类名或子类的名称, nil == @"UIApplication"
        //第四个参数:UIApplication代理的代理名称,NSStringFromClass([AppDelegate class] == @"AppDelegate"
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

UIApplicationMain函数实现

  1. 根据第三个参数principalClassName传递的类名创建UIApplication对象
  2. 根据第四个参数delegateClassName创建AppDelegate代理对象,给UIAplication设置代理
  3. 开启run loop主事件循环,开始监听处理事件
  4. 加载Info.plist文件,判断是否指定main,如果指定了就会去加载.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,952评论 8 265
  • OC语言基础 1.类与对象 类方法 OC的类方法只有2种:静态方法和实例方法两种 在OC中,只要方法声明在@int...
    奇异果好补阅读 9,809评论 0 11
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,874评论 1 32
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,054评论 3 119
  • 打开程序 执行main函数 执行UIApplicationMain函数UIApplicationMain底层实现:...
    Mitchell阅读 14,864评论 7 23

友情链接更多精彩内容