Appdelegate

1. UIApplicationMain主要负责了:从给定的类名初始化应用程序对象、从给定的应用程序委托类,初始化一个应用程序委托、启动主事件循环,并开始接收事件。

2. canOpenUrl在iOS9开始的限制

* 对于用户隐私的考虑,从iOS9开始无法直接使用canOpenUrl判断用户是否安装了某个app,需要对这些app的url scheme加入白名单,在info.plist里的LSApplicationQueriesSchemes项增加白名单。此外,白名单有50个数量上限。

参考《WWDC 2015 Session 703: "Privacy and Your App"》(https://developer.apple.com/videos/play/wwdc2015/703/)

3. NSNotificationCenter还有另一种基于block的添加通知的api:

- (id )addObserverForName:(nullable NSString *)name object:(nullable id)obj queue:(nullable NSOperationQueue *)queue usingBlock:(void (^)(NSNotification *note))block;

在NSNotificationCenter类里的addObserver的文档里有提到"If your app targets iOS 9.0 and later or macOS 10.11 and later, you don't need to unregister an observer in its deallocation method. If your app targets earlier releases, be sure to invoke removeObserver:name:object: before observer or any object specified in addObserver:selector:name:object: is deallocated."

4.如果deployment target从9.0开始,就不需要再关心removeObserver了。但是如果你的app支持的iOS最低版本是iOS9之前,就需要在addObserver之后,在合适的地方去做removeObserver,否则当你的controller dealloc之后,又有通知触发的话,就会crash。一般来讲,在viewDidLoad里对通知addObserver,那么就在viewDidUnload里调用removeObserver:name:object;在init里addObserver,就在dealloc里removeObserver。当然,你只在dealloc里直接调用

[[NSNotificationCenter defaultCenter] removeObserver:self]可以将所有通知移除。


1.从上到下表示程序是活跃状态,非活跃状态,后台



1.是app右上角的数字  2.第二行是打开响应的应用 3.第三行是设置yes后,屏幕会常亮不会自动锁屏。



1.appDelegate实现了UIApplicationDelegate的协议



1.第一行是启动 2.第二行管理window/rootVC 3.第三行 管理app收到的push



launchOptions代表启动的方式



1.Remote 通过远程push启动的 2.local 通过localnotificat,3.urlKey 通过openurl启动 4.sourceApplicationkey 从哪一个其他app调用openurl触发当前app启动5.shortcut通过快捷方式启动app 通过快捷菜单启动app。




注意: URL Schemes会从浏览器或者其他应用中启动这个app



通过这个属性指定自己app的名字,就可以通过浏览器或者其他app唤起这个应用。



1.第一行ios9之后用这个 2.第二行ios9之前调用



打开响应的app



点击这个按钮,会对URL schemes 跳转的进行调试



在未启动app的时候跳转这个app,会将信息都传到launchOptions里面。




1.未启动app启动之后会首先进入launchingwithoption这个函数,之后进入openurl这个函数。2.相反app在后台后,从浏览器进入这个app会直接跳过launching这个函数到openurl这个函数。





通过openurl的话会有openurl的这个回调。










UIApplicationState









app从未启动到启动调用的方法



拉起控制中心,多出一条日志


控制中心拉下去会从inactive状态变成active状态



双击home,进入了resignactive状态


回到正常状态变成了becomeActive状态


单击home会先进入willResignActive,之后进入DidEnterBackground状态


再次点击图标app会执行以上操作


把app杀掉会调用willterminate表示app要退出了


1.terminated杀掉  2.第二行挂起状态


1.系统因为某些原因,要将系统kill掉才会通知到app做一些保存数据的处理 2.用户主动把app放到后台并且杀掉的话并不会触发这个方法的回调





1.ios7之前的时间是10分钟,ios7的话只有3分钟了。(在后台运行不能超过这个时长,超过这个时长系统就不会再给你分配cpu了2.特殊的例如音乐等可以一直在后台运行(苹果系统允许的)

当然iOS为了特殊应用也保留了一些可以实现“真后台”的方法,摘取比较常用的:

1.VOIP

2.定位服务

3.后台下载

4.在后台一直播放无声音乐(容易受到电话或者其他程序影响,所以暂未考虑)

5….更多

注意:保持长时间运行用定位服务可以实现:参考文章:https://www.jianshu.com/p/174fd2673897





AppDelegate如何知道app状态变化呢?---->用Notification来实现




1.observer设置成自己的一个class,观察者处理通知的方法写在这个selector里面,观察通知的名称就写在name里面,object通知的发送者,如果说是nil表示监听任何对象发送的这个通知。



通知post 到nsnotificationcenter,center在通知observer触发了这个方法



这是发送通知





调用完,需要删除响应的通知observer。




app进入后台之后会触发这个通知。



1.第一行  他们的区别:一个类当中如果要执行另外一个类的方法,messaging前提是拥有另外一个类的实例对象,notification发送通知不需要知道被通知的对象是谁2.Notification与KVO的区别:KVO是在kaypath上添加观察者,Notification是在通知上添加观察者




Push 苹果的消息推送机制


红框中的就是push的方式推送









1.在微信中点击左侧的打开就会跳转到响应的app中,右侧显示从微信跳转(实际上就是通过Universal Link进行跳转的



响应回调


通过搜索也会跳转到响应的app当中


Appdelegate可以理解为各个功能的一个集散中心。

你可能感兴趣的:(Appdelegate)