转自:http://blog.csdn.net/lifengzhong/article/details/7739539

受限与iOS系统的运行机制,绝大多数情况下一个应用在进入后台后会马上进入suspend或terminate状态,也就是说不能执行代码,iOS中也没有类似WIndows中Service的概念,但存在某些例外:

1:有某些重要的任务,例如保存用户数据,网络下载等,可以申请一段时间的background运行时间,但时间段内能进行的操作比较有限,且有时间限制,长度为600秒左右。

2:某些特定类型的应用,具体包括:

  • VoIP应用
  • 定位类应用
  • 新闻类应用
  • 音乐类应用
这些类型的应用可以获得没有时间限制的background运行。但并不是你随便声明一下应用类型就可以了,如果挂羊头卖狗肉,是无法通过App Store审核的。
既然大多数情况下系统中只有一个活动的应用在运行,加上iOS内不同应用由于沙箱运行导致的高度隔离,我们熟悉的那些IPC方法,例如管道、邮槽、共享内存、Socket等,往往会显得比较无力了,针对此种情况,苹果也提供了对应的解决方案,也就是我们今天将要介绍的:URL Schema
简单来说,URL Schema就是iOS内的应用调用协议,应用A可以声明自定义的调用协议,就如http/https那样,当另一个应用B打算在应用内打开应用A时,可以打开使用A自定义的协议开头的URL来打开A,除了协议头,URL中还可以附加其他参数,具体过程参见下图:
这个就是Safari与Alocola之间的交互过程。
接下来介绍一下自定义URL Schema的过程。
1:创建Xcode项目
2:打开项目,在其中的info.plist中添加如下图所示字段:
其中的"lifengzhong"便是我为此应用注册的自定义协议名称,其他应用如果想调用我的应用,只要打开形似:“lifengzhong://XXX”的URL便可以了。
3:在项目AppDelegate中添加函数:
[cpp]  view plain copy
  1. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
  2. {
  3. if ([sourceApplication isEqualToString: @"xxx.xxx.xxx"]) {
  4. //xx
  5. }
  6. return YES;
  7. }

此函数便是URL Call的处理函数了,每当其他应用通过URL打开此应用时,该函数都会被调用。

参数url是传进的url,sourceApplication是呼叫应用的bundle identifier,通过此参数,应用可以对呼叫的应用进行过滤。annotation是呼叫过程中可以附加的额外参数,这里没有用到。
4:当另一个应用想调用我的应用时,只需拼接好URL,,然后打开URL即可,十分方便:
[cpp]  view plain copy
  1. NSURL* url = [NSURL URLWithString: @"lifengzhong://1,545166"];
  2. [[UIApplication sharedApplication] openURL: url];

这里的1,545166是我自定义的参数,你可以根据自己需要定义URL的格式。

通过上面介绍的URL Schema方法,算是实现了某种程度的进程间通信,但这种方式的一个缺点是,同一时刻还是只能有一个进程在前台,主动呼叫的应用在调用成功后必须进入后台,所以能传递的只有URL中所带的参数或annotation中所带的参数。调用的过程中会出现应用之间的切换,用户体验不好。但聊胜于无,苹果好歹还是留了这么一个口子,感恩吧。

iOS内IPC(进程间通信)方法小结相关推荐

  1. YDOOK: Python3 IPC 进程间通信方法分类总结

    YDOOK: Python3 IPC 进程间通信方法分类总结 © YDOOK JY Lin 1.管道:pipeline 2.消息队列:msg queue 3.共享内存:share memory 4.信 ...

  2. 高效编写iOS方法-小结

    本文是本人看完<高效编写iOS的52条方法>的一些小结及笔记. 第 1 条 1.使用消息结构的语言,其运行时所应执行的代码由运行环境来决定(--动态绑定):而使用函数调用的语言,则由编译器 ...

  3. 进程间通信 (IPC) 方法总结(三)

    进程间通信 (IPC) 方法总结(三) 信号量(SEMAPHORE) 信号量是一个计数器,用于多进程对共享数据的访问,信号量的意图在于进程间同步. 为了获得共享资源,进程需要执行下列操作: 创建一个信 ...

  4. 内网渗透系列:内网信息搜集方法小结2

    目录 前言 一.本机信息搜集 1.用户列表 (1)windows用户列表 (2)分析邮件用户 2.进程列表 3.服务列表 4.端口列表 5.补丁列表 6.本机共享 7.本用户习惯分析 8.获取当前用户 ...

  5. 内网渗透系列:信息搜集方法小结2

    目录 前言 一.开源情报(OSINT) 1.whois/反查/相关资产 2.github敏感信息 (1)github邮箱密码爬取 (2)GSIL (3)x-patrol 3.google hackin ...

  6. 关于iOS内购常见的避审方法

    苹果审核支付功能哪些属于内购哪些不属于内购? 1.首先,我们要知道哪些是产品需要内购,哪些不需要内购: 2.走不走内购,主要看我们付费的产品,是留存在App内使用和操作:还是在App外部使用:比如说: ...

  7. ios内购返回html,iOS内购掉单问题处理方法

    iOS内购提供了两种模式,一种是单机(本地验证)模式,另一种是服务器端验证模式. 单机验证模式:适用于单机应用,安全性低,数据易被篡改. 服务器验证模式:应用服务器提交支付票据到苹果服务器验证,安全性 ...

  8. Windows Mobile使用Shared Memory(共享内存)进行IPC(进程间通信)的开发

    背景 在Unix-like系统进行IPC(Inter-process communication)通信,Shared memory是效率最高的,我称之为IPC的王中王. 简介 本文讲述在Windows ...

  9. VC/MFC 进程间通信方法总结

    VC/MFC 进程间通信方法总结 摘   要   随着人们对应用程序的要求越来越高,单进程应用在许多场合已不能满足人们的要求.编写多进程 / 多线程程序成为现代程序设计的一个重要特点,在多进程程序设计 ...

最新文章

  1. 面向汽车应用的硬件推理芯片
  2. 基于HttpModule扩展
  3. Science Advances: 中科院微生物所叶健团队揭示双生病毒调控植物免疫平衡制约机制...
  4. 浅析强化学习及使用Policy Network实现自动化控制
  5. 进一步认识golang中的并发
  6. 再部署一个 instance 和 Local Network - 每天5分钟玩转 OpenStack(131)
  7. [SAP ABAP开发技术总结]动态语句、动态程序
  8. 积极打破消极思维模式
  9. android aar jar制作,AndroidStudio aar、jar生成及其引用
  10. php 越权 漏洞,PHPYUN最新版多处SQL注入及越权操作二
  11. Interceptor拦截器 -- gRPC生态里的中间件
  12. 数字展示领域该这样用 沉浸式方案应用解读
  13. java中如何生成对外的接口_Java利用Swagger2自动生成对外接口的文档
  14. python编写tftp服务器
  15. CTFMON。exe
  16. R语言非参数检验(一)
  17. PHP 获取格式化的日期和时间
  18. p20华为云电脑白屏_华为云电脑体验评测,原来手机办公、修图这么强大了
  19. Composer学习
  20. 5x2cv配对t检验(5x2cv paired t test)

热门文章

  1. AutoLisp学习笔记
  2. lisp实战文库_autolisp教程pdf
  3. JAVA设计模式什么鬼(桥接)——作者:凸凹里歐
  4. 网页设计HTML经典语法大全
  5. 前端开发编辑器,一轻一重两相宜
  6. CNCKAD 数冲激光编程排版软件介绍和下载
  7. 黑苹果安装教程,教您黑苹果怎么安装
  8. 基于chromium浏览器加载ActiveX实践四扩展
  9. mingw 构建 mysql-connector-c-6.1.9记录
  10. 重新安装ODBC 驱动程序方法之一