什么是UIApplication?
单例对象
.UIApplication作用?
应用级别
的操作.static Persion *_instance;
+ (void)load{
想要保存创建的对象, 要用成员属性,但是现在是类方法, 没有办法访问成员属性. 所以搞了一个static的静态变量进行保存
创建对象
_instance = [[self alloc] init];
}
2.保证调用alloc时会产?异常, 重写系统的是alloc方法
+(instancetype)alloc {
当调用alloc方法时,先查看一下_instance有没有值,如果已经有值的话,直接抛出异常.
if(_instance) {
NSException *exception = [NSException exceptionWithName: @"NSInternalInconsistencyException"
reason:
@"There can only be one Persion instance." userInfo:nil]; 抛出异常
[exception raise];
}
保持系统的做法.
return [super alloc];
}
+ (instancetype)sharePersion {
return _instance
}
获取UIApplication对象
UIApplication *ap = [UIApplication sharedApplication];
在设置之前, 要注册一个通知,从ios8之后,都要先注册一个通知对象.才能够接收到提醒. UIUserNotificationSettings *notice =
[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];
注册通知对象
[ap registerUserNotificationSettings:notice];
设置提醒数字
ap.applicationIconBadgeNumber = 20;
ap.networkActivityIndicatorVisible = YES;
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
- (BOOL)prefersStatusBarHidden {
return NO;
}
View controller-based status bar appearance(key:UIViewControllerBasedStatusBarAppearance)
控制器管理会无效
UIApplication *ap = [UIApplication sharedApplication];
ap.statusBarStyle = UIStatusBarStyleLightContent;
ap.statusBarHidden = YES;
UIApplication *ap = [UIApplication sharedApplication]; URL:协议头://域名 应用程序通过协议头的类型,去打开相应的软件.
NSURL *url =[NSURL URLWithString:@"http://www.baidu.com"]; [ap openURL:url];
打电话
[application openURL:[NSURL URLWithString:@"tel://10086"]];
发短信
[app openURL:[NSURL URLWithString:@"sms://10086"]];
app很容易受到打扰
。通知
它的delegate对象,让delegate代理来处理这些系统事件delegate可处理的事件包括:
UIApplication会在程序一启动时候创建一个遵守UIApplicationDelegate
的代理.
这个就是我们程序一创建时的AppDelegate类。AppDelegate就是遵守了UIApplicationDelegate协议。 在这个类中定义很多监听系统事件的方法.同时也定义了一些应用程序的生命周期方法.
应用程序启动完成的时候调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions {
return YES;
}
当我们应用程序即将失去焦点的时候调用
- (void)applicationWillResignActive:(UIApplication *)application {
NSLog(@"%s",__func__);
}
当我们应用程序完全进?后台的时候调用
- (void)applicationDidEnterBackground:(UIApplication *)application{
NSLog(@"%s",__func__);
}
当我们应用程序即将进?前台的时候调用
- (void)applicationWillEnterForeground:(UIApplication *)application {
NSLog(@"%s",__func__);}
当我们应用程序完全获取焦点的时候调用
只有当一个应用程序完全获取到焦点,才能与用户交互.
- (void)applicationDidBecomeActive:(UIApplication *)application {
- NSLog(@"%s",__func__);
}
当我们应用程序即将关闭的时候调用
- (void)applicationWillTerminate:(UIApplication *)application {
NSLog(@"%s",__func__);
}
应?程序的启动原理(重要)
程序启动时执行main函数,在main函数当中有以下操作.
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
第三个参数:UIApplication类名或者子类的名称 nil == @"UIApplication"
NSStringFromClass好处:1.有提示功能 2.避免输入错误
}
}
程序完整启动流程
原文链接:http://www.jianshu.com/p/a72bcb948371
原文:http://www.cnblogs.com/foxting/p/5517920.html