iOS理解扩展的运行机制

     在安装扩展之后,扩展并不会自动运行,用户必须执行特定的操作来启用扩展。如果是Today扩展,用户可以在通知中心的Today视图中编辑启用扩展。如果是自定义键盘扩展,用户需要在系统设置的通用选项下的键盘选项中启用自定义键盘扩展。如果是Share扩展,用户只需点击系统提供的分享按钮,即可在分享列表中找到分享扩展。

     一个扩展并不是一个app,他的生命周期和运行环境不同于普通app。在生命周期方面,扩展的生命周期从用户在另一个app中选择扩展开始,一直到扩展完成了用户的请求生命周期结束。在运行环境方面,扩展的限制要比普通的app严格,扩展的可用内存上限以及可用的API都比普通app要少。严格限制扩展的内存是因为在同一时间可能会有多个扩展同时运行,如widget扩展。

      调用扩展的应用称为host app,对于Widget扩展,host app就是Today。host app会在扩展的有效生命周期内定义一个扩展的上下文。通过扩展上下文,host app 可以和扩展互传数据。注意:扩展之和host app直接通信,扩展与containing app ,以及containing app和host app之间不存在通信关系。如果扩展需要打开containing app,则通过自定义URL scheme方式实现,而不是直接向containing app发送消息。

      扩展是一个单独的个体,扩展拥有独立的target,独立的bundle,独立的运行进程,独立的地址空间。这意味着即使你的containing app不在运行,系统也可以启动扩展。或者你的containing app处于挂起状态,同样不会影响扩展的运行。所以系统可以单独对扩展执行优化。


github主页:https://github.com/chenyufeng1991  。欢迎大家访问!

你可能感兴趣的:(ios)