一、属性 及解释:
+ (UIApplication *)sharedApplication;//单例
- 1.delegate 代理
- 2.- (void)beginIgnoringInteractionEvents;
- (void)endIgnoringInteractionEvents;
- (BOOL)isIgnoringInteractionEvents;
这三种方法一般用于动画开始和结束设置,让动画执行期间,用户的其他触摸事件暂时不去响应。
这样就不用弄遮罩层 了,视图上的其他控件就没法响应了,等到动画结束后才能响应。
- 3.@property(nonatomic,getter=isIdleTimerDisabled) BOOL idleTimerDisabled;
用来设置屏幕是否进入睡眠,默认是 NO ,即默认是会进入睡眠的。
一般情况下只有游戏或者是一直需要用户交互事件的才设置为 YES, 不让它空闲的时候自动进入睡眠
- 4.- (BOOL)openURL:(NSURL*)url; //打开一个 url 资源,如果这个 url 是另外一个 app 的url ,另外一个app 将会启动。url 支持几种类型:http,https, 电话、视频聊天、email
- (BOOL)canOpenURL:(NSURL *)url;//能否打开
- 5. - (void)sendEvent:(UIEvent *)event; //任何事件都可以在这里被截获
- 6.@property(nullable, nonatomic,readonly) UIWindow *keyWindow;//keywindow 是指当前活跃的window ,与用户交互的window
@property(nonatomic,readonly) NSArray<__kindof UIWindow *> *windows;
//windows 是指当前app 打开的所有window, 比如键盘也在一个window 里面,alert 也在一个 window 里面。
在 windows 数组里面, window 是根据 windowLevel 来排列的,最后一个覆盖在最上面
- 7.- (BOOL)sendAction:(SEL)action to:(nullable id)target from:(nullable id)sender forEvent:(nullable UIEvent *)event;
作用:发送一个由selector定义的动作消息给一个特殊目标。
- 8.@property(nonatomic,getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible //状态栏里显示联网状态的菊花 默认NO
- 9.@property(readonly, nonatomic) UIStatusBarStyle statusBarStyle; //状态栏前景样式
有两种:
UIStatusBarStyleDefault//黑色文字、电池等
UIStatusBarStyleLightContent//白色文字、电池等
- 10.@property(readonly, nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden;//是否隐藏状态栏
- 11.@property(readonly, nonatomic) UIInterfaceOrientation statusBarOrientation;//是你程序界面的当前旋转方向
这个可以设置
有五种:(等号前是状态栏方向 后面是设备方向)
UIInterfaceOrientationUnknown = UIDeviceOrientationUnknown,
UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait,
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight,
UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeLeft
对比:UIDeviceOrientation
有六种
UIDeviceOrientationUnknown, //未知
UIDeviceOrientationPortrait, // 设备垂直,home键在下
UIDeviceOrientationPortraitUpsideDown, // 设备垂直,home键在上
UIDeviceOrientationLandscapeLeft, // 设备水平,home键在右
UIDeviceOrientationLandscapeRight, // 设备水平,home键在左
UIDeviceOrientationFaceUp, // 设备平躺,正面朝上
UIDeviceOrientationFaceDown //设备平躺,正面朝下
- 12.- (UIInterfaceOrientationMask)supportedInterfaceOrientationsForWindow:(nullable UIWindow *)window;
- 13.@property(nonatomic,readonly) NSTimeInterval statusBarOrientationAnimationDuration; //获取当前电池条动画改变的时间
- 14.@property(nonatomic,readonly) CGRect statusBarFrame; //状态栏高度,如果状态栏隐藏,返回0
- 15.@property(nonatomic) NSInteger applicationIconBadgeNumber; //icon右上角的消息个数//iOS8以后需要用户授权加上以下代码
- 16.@property(nonatomic) BOOL applicationSupportsShakeToEdit ;//支持摇动,使用该属性时同时让该控制器成为第一响应者,即
[[UIApplicationsharedApplication] setApplicationSupportsShakeToEdit:YES];
[selfbecomeFirstResponder];
- 17.@property(nonatomic,readonly) UIApplicationState applicationState;//程序运行状态
有三种
UIApplicationStateActive, //正在运行
UIApplicationStateInactive,//——正在进入 didFinishLaunchingWithOptions 里
UIApplicationStateBackground//进入后台
- 18.@property(nonatomic,readonly) NSTimeInterval backgroundTimeRemaining;
- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void(^ __nullable)(void))handler;
- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithName:(nullable NSString *)taskName expirationHandler:(void(^ __nullable)(void))handler;
- (void)endBackgroundTask:(UIBackgroundTaskIdentifier)identifier;
这几个方法都是关于程序进入后台后,所有线程都被挂起,app继续向iOS申请,在后台完成一个Long-RunningTask任务
用法:
@property (nonatomic,unsafe_unretained)UIBackgroundTaskIdentifi
- - (void)applicationDidEnterBackground:(UIApplication *)application
- {
- //检测多任务的可用性
- if ([self isMultitaskingSupported] == NO) {
- return;
- }
- //定义要完成的任务 ,开始执行,
- ......
- //返回一个任务标识
- self.backtaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^(void){
- // do something 。。。
- //结束该任务
- [[UIApplication sharedApplication] endBackgroundTask:self.backtaskIdentifier]; //将任务标识符标记为 UIBackgroundTasksInvalid,标志任务结束
- self.backtaskIdentifier = UIBackgroundTaskInvalid;
- }];
- }
- 19.- (void)setMinimumBackgroundFetchInterval:(NSTimeInterval)minimumBackgroundFetchInterval;//app唤醒最小时间
需要定期请求数据的程序可以在系统中注册,这样程序就可以在后台被定期唤醒来下载新的数据。这种情况需要在程序的Info.plist文件中UIBackgroundModes项增加fetch类型,同时通过setMinimumBackgroundFetchInterval:方法来设置程序定期获取数据的最小时间间隔。
一,开启Background Fetch支持
在XCode->TARGETS->Capabilities->Background Modes打开并添加Background Fetch.
同时在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中添加:
[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
MinimumBackgroundFetchInterval参数值是两次Fetch时间间隔,不能保证每隔这个时间间隔都会调用。这里设置为UIApplicationBackgroundFetchIntervalMinimum,意思是尽可能频繁的调用我们的Fetch方法。
二,增加实现Fetch方法
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{};
每次系统Fetch时都会调用该方法,我们可以在该方法中做刷新数据等操作,操作执行完成以后要调用completionHandlerblock(),比如:completionHandler(UIBackgroundFetchResultNewData);文档中说系统会根据completionHandler(执行的时间)来估计此次Fetch的耗电等。如果耗时耗电比较多,可能会降低被调用的次数。但这个方法也不是不限时执行的,说是有30s的时间来执行操作。completionHandler有三个参数:
UIBackgroundFetchResultNewData 成功拉取数据
UIBackgroundFetchResultNoData 没有新数据
UIBackgroundFetchResultFailed 拉取数据失败或者超时
三,模拟Fetch事件
在实际的IOS7环境中,Fetch事件是由系统管理的,app开发者无法预先知道Fetch事件达到的时机。但XCode也提供了Fetch事件的调试办法,在XCode上运行程序后,在Debug->Simulate Background Fetch.
还有一种情况是app没有运行(不在前台也不在后台),被Fetch事件唤醒执行.这种情况的测试方法如下:
Product->Scheme->Edit scheme 在Debug模式选中Options,点选Launch due to a background fetch event,运行即可。
可以观察到当Fetch事件到来时,app先进入后台,再执行- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{}。
@property (nonatomic, readonly) UIBackgroundRefreshStatus backgroundRefreshStatus ;//是否开启app后台刷新功能
UIBackgroundRefreshStatusRestricted, //设备系统不支持后台刷新
UIBackgroundRefreshStatusDenied, //用户拒绝后台刷新
UIBackgroundRefreshStatusAvailable //后台刷新可用
//判断if ([[UIApplication sharedApplication] backgroundRefreshStatus] != UIBackgroundRefreshStatusAvailable){}
- 20.@property(nonatomic,readonly,getter=isProtectedDataAvailable) BOOL protectedDataAvailable;//(不清楚)
- 21.@property(nonatomic,readonly) UIUserInterfaceLayoutDirection userInterfaceLayoutDirection;
两种;
UIUserInterfaceLayoutDirectionLeftToRight,//从左到右的布局
UIUserInterfaceLayoutDirectionRightToLeft,//从右到左的布局
- 22.@property(nonatomic,readonly) NSString *preferredContentSizeCategory ;//这个是返回用户设置的系统字体大小。(设置-通用-辅助功能-更大字体)
目前6s上我看有7个选择,即下列从1到7.(经测试,如果设置最小会打印:UICTContentSizeCategoryXS,依此类推)
//uicontentsizecategoryextrasmall
// uicontentsizecategorysmall
// uicontentsizecategorymedium
// uicontentsizecategorylarge
// uicontentsizecategoryextralarge
// uicontentsizecategoryextraextralarge
// uicontentsizecategoryextraextraextralarge
// uicontentsizecategoryaccessibilitymedium
// uicontentsizecategoryaccessibilitylarge
// uicontentsizecategoryaccessibilityextralarge
// uicontentsizecategoryaccessibilityextraextralarge
// uicontentsizecategoryaccessibilityextraextraextralarge
二、分类:远程通知 UIRemoteNotifications
//详细用法:请查看:远程推送和本地通知教程
- 1.- (void)registerForRemoteNotifications;//注册
//iOS8变化 <span style="color:green;"> </span><span style="color:black;">[application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]]; [application registerForRemoteNotifications];</span>
- 2.- (void)unregisterForRemoteNotifications;//注销
- 3.- (BOOL)isRegisteredForRemoteNotifications;//是否注册
- 4.
- (void)registerForRemoteNotificationTypes:(UIRemoteNotificationType)types;//已废弃,Please use registerForRemoteNotifications and registerUserNotificationSettings: instead
- 5.
- (UIRemoteNotificationType)enabledRemoteNotificationTypes;//已废弃 Please use -[UIApplication isRegisteredForRemoteNotifications], or -[UIApplication currentUserNotificationSettings] to retrieve user-enabled remote notification and user notification settings
三、分类:本地通知 UILocalNotifications
- 1.- (void)presentLocalNotificationNow:(UILocalNotification *)notification;//立即发送通知到本机
- 2.- (void)scheduleLocalNotification:(UILocalNotification *)notification; //按照配置的触发时间调用通知
- 3.- (void)cancelLocalNotification:(UILocalNotification *)notification;//取消某个通知
- 4.- (void)cancelAllLocalNotifications;//移除所有通知
- 5.@property(nullable,nonatomic,copy) NSArray<UILocalNotification *> *scheduledLocalNotifications; // 本地通知数组
四、分类 通知设置 UIUserNotificationSettings
- 1.- (void)registerUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings ;//注册通知设置
- 2.- (nullable UIUserNotificationSettings *)currentUserNotificationSettings;//现在的通知设置
五、分类 远程控制开关 UIRemoteControlEvents
- 1.- (void)beginReceivingRemoteControlEvents;
- 2.- (void)endReceivingRemoteControlEvents;
远程控制事件来源于一些外部的配件,如耳机等。用户可以通过耳机来控制视频或音频的播放。接收响应者对象需要检查事件的子类型来确定命令(如播放,子类型为UIEventSubtypeRemoteControlPlay),然后进行相应处理。
为了响应远程控制事件,UIResponder提供了以下方法
- (void)remoteControlReceivedWithEvent:(UIEvent *)event
我们可以在子类中实现该方法,来处理远程控制事件。不过,为了允许分发远程控制事件,我们必须调用UIApplication的beginReceivingRemoteControlEvents方法;而如果要关闭远程控制事件的分发,则调用endReceivingRemoteControlEvents方法。
详情请查看 :UIResponder
六、分类 UINewsstand
-
1.- (void)setNewsstandIconImage:(nullable UIImage *)image
七、分类 UIShortcutItems
-
1.@property (nullable, nonatomic, copy) NSArray<UIApplicationShortcutItem *> *shortcutItems;//3Dtouch相关,按压icon显示的Item。
-
此属性用来注册3Dtouch的item,或用来获取当前注册的item
//实例如下:
UIApplicationShortcutIcon *icon = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeShare];
UIApplicationShortcutItem * item = [[UIApplicationShortcutItem alloc]initWithType:@"setup" localizedTitle:@"设置" localizedSubtitle:nil icon:icon userInfo:nil];
UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeShare];
UIApplicationShortcutItem * item1 = [[UIApplicationShortcutItem alloc]initWithType:@"com" localizedTitle:@"发表话题" localizedSubtitle:nil icon:icon1 userInfo:nil];
[UIApplication sharedApplication].shortcutItems = @[item,item1];
UIApplicationShortcutItem *shortcutItem = [launchOptions valueForKey:UIApplicationLaunchOptionsShortcutItemKey];
//如果是从快捷选项标签启动app,则根据不同标识执行不同操作,然后返回NO,防止调用
if (shortcutItem) {
//。。。。。。
self.window.rootViewController = mainNav;
[self.window makeKeyAndVisible];
// 判断先前我们设置的快捷选项标签唯一标识,根据不同标识执行不同操作
if ([shortcutItem.type isEqualToString:@"com.my"]) {//进入搜索界面
} else if ([shortcutItem.type isEqualToString:@"com"]) {//进入分享界面
}
return NO;
}
八、分类 UIStateRestoration
- 1.- (void)extendStateRestoration;
- 2.- (void)completeStateRestoration;
- 3.- (void)ignoreSnapshotOnNextApplicationLaunch;
- 4.+ (void)registerObjectForStateRestoration:(id<UIStateRestoring>)object restorationIdentifier:(NSString *)restorationIdentifier;
九、 ————————————————delegate
1、- (void)applicationWillResignActive:(UIApplication *)application
说明:当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,比如来电话了
2、- (void)applicationDidBecomeActive:(UIApplication *)application
说明:当应用程序入活动状态执行,这个刚好跟上面那个方法相反
3、- (void)applicationDidEnterBackground:(UIApplication *)application
说明:当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可
4、- (void)applicationWillEnterForeground:(UIApplication *)application
说明:当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。
5、- (void)applicationWillTerminate:(UIApplication *)application
说明:当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值。
6、- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
说明:iPhone设备只有有限的内存,如果为应用程序分配了太多内存操作系统会终止应用程序的运行,在终止前会执行这个方法,通常可以在这里进行内存清理工作防止程序被终止
7、- (void)applicationSignificantTimeChange:(UIApplication*)application
说明:当系统时间发生改变时执行
8、- (void)applicationDidFinishLaunching:(UIApplication*)application
说明:当程序载入后执行
9、- (void)application:(UIApplication)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame
说明:当StatusBar框将要变化时执行
10、- (void)application:(UIApplication*)application willChangeStatusBarOrientation:
(UIInterfaceOrientation)newStatusBarOrientation
duration:(NSTimeInterval)duration
说明:当StatusBar框方向将要变化时执行
11、- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url
说明:当通过url执行
12、- (void)application:(UIApplication*)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation
说明:当StatusBar框方向变化完成后执行
13、- (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame
说明:当StatusBar框变化完成后执行
原文:http://blog.csdn.net/hdfqq188816190/article/details/51442236