iOS 进程间通讯方式:

解释

  1. URL Scheme

    这个是iOS app通信最常用到的通信方式,App1通过openURL的方法跳转到App2,并且在URL中带上想要的参数,有点类似http的get请求那样进行参数传递。这种方式是使用最多的最常见的,使用方法也很简单只需要源App1在info.plist中配置LSApplicationQueriesSchemes,指定目标App2的scheme;然后在目标App2的info.plist中配置好URL types,表示该app接受何种URL scheme的唤起。

  2. KeyChain

    iOS系统的Keychain是一个安全的存储容器,它本质上就是一个sqllite数据库,它的位置存储在/private/var/Keychains/keychain-2.db,不过它所保存的所有数据都是经过加密的,可以用来为不同的app保存敏感信息,比如用户名,密码等。iOS系统自己也用keychain来保存VPN凭证和Wi-Fi密码。它是独立于每个App的沙盒之外的,所以即使App被删除之后,Keychain里面的信息依然存在。

    基于安全和独立于app沙盒的两个特性,Keychain主要用于给app保存登录和身份凭证等敏感信息,这样只要用户登录过,即使用户删除了app重新安装也不需要重新登录。

    那Keychain用于App间通信的一个典型场景也和app的登录相关,就是统一账户登录平台。使用同一个账号平台的多个app,只要其中一个app用户进行了登录,其他app就可以实现自动登录不需要用户多次输入账号和密码。一般开放平台都会提供登录SDK,在这个SDK内部就可以把登录相关的信息都写到keychain中,这样如果多个app都集成了这个SDK,那么就可以实现统一账户登录了。

  3. UIPasteboard

    UIPasteboard是剪切板功能,因为iOS的原生控件UITextView,UITextField 、UIWebView,我们在使用时如果长按,就会出现复制、剪切、选中、全选、粘贴等功能,这个就是利用了系统剪切板功能来实现的。而每一个App都可以去访问系统剪切板,所以就能够通过系统剪贴板进行App间的数据传输了。

  4. UIDocumentInteractionController

    UIDocumentInteractionController主要是用来实现同设备上app之间的共享文档,以及文档预览、打印、发邮件和复制等功能。它的使用非常简单.

    首先通过调用它唯一的类方法 interactionControllerWithURL:,并传入一个URL(NSURL),为你想要共享的文件来初始化一个实例对象。然后UIDocumentInteractionControllerDelegate,然后显示菜单和预览窗口。

  5. App Groups

    App Group用于同一个开发团队开发的App之间,包括App和Extension之间共享同一份读写空间,进行数据共享。同一个团队开发的多个应用之间如果能直接数据共享,大大提高用户体验。

  6. local socket

    这种方式不太常见,也是很容易被iOS开发者所忽略但是特别实用的一种方法。它的原理很简单,一个App1在本地的端口port1234进行TCP的bind和listen,另外一个App2在同一个端口port1234发起TCP的connect连接,这样就可以建立正常的TCP连接,进行TCP通信了,那么就想传什么数据就可以传什么数据了。

    这种方式最大的特点就是灵活,只要连接保持着,随时都可以传任何相传的数据,而且带宽足够大。它的缺点就是因为iOS系统在任意时刻只有一个app在前台运行,那么就要通信的另外一方具备在后台运行的权限,像导航或者音乐类app。

    它是常用使用场景就是某个App1具有特殊的能力,比如能够跟硬件进行通信,在硬件上处理相关数据。而App2则没有这个能力,但是它能给App1提供相关的数据,这样APP2跟App1建立本地socket连接,传输数据到App1,然后App1在把数据传给硬件进行处理。

  7. AirDrop

    通过AirDrop实现不同设备的App之间文档和数据的分享;

  8. UIActivityViewController

    iOS SDK中封装好的类在App之间发送数据、分享数据和操作数据;

其他

  • UIDocumentInteractionController和UIActivityViewController区别:UIDocumentInteractionController处理文件,而UIActivityViewController处理您应用程序中的各种其他服务.

  • 所有的进程间通讯最终落实依赖的还是Mach内核API提供的功能。Mach端口是轻量并且强大的而又缺少相关文档晦涩使用的。Core Foundation和Foundation为Mach端口提供了高级API。在内核基础上封装的CFMachPort / NSMachPort可以用做runloop源,尽管CFMachPort / NSMachPort有利于的是两个不同端口之间的通讯同步。

  • iOS进程间通讯原理:https://nshipster.com/inter-process-communication/

iOS进程间通讯方式相关推荐

  1. Linux 进程间通讯方式 pipe()函数

    Linux 进程间通讯方式有以下几种: 1->管道(pipe)和有名管道(fifo). 2->消息队列 3->共享内存 4->信号量 5->信号(signal) 6-&g ...

  2. Nginx进程间通讯方式

    Nginx Socket Channel 父子进程通讯 socketpair 该方法用于创建父子进程间使用的套接字入参: type 表示套接字上使用TCP还是UDP sv[2] 表示一个含有两个元素的 ...

  3. java进程间通讯方式有哪些_java 进程间通讯的有几种方法?

    展开全部 进程间通信的方法主要有以下几种: (1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另32313133353236313431303231363533e78988e6 ...

  4. Android(IPC)进程间通讯1:详解Binder由来?

    完整原文:http://tryenough.com/android-... Android开发的进程间通讯,整个Android的应用都依赖于binder做底层通信机制.而Linux中提供的进程间通讯方 ...

  5. Linux 进程间通讯(IPC)方式 ------- 共享内存

    Linux 进程间通讯(IPC)方式有以下几种: 1->管道(pipe)和有名管道(fifo). 2->消息队列 3->共享内存 4->信号量 5->信号(signal) ...

  6. linux进程间通讯的几种方式的特点和优缺点,和适用场合。

    http://blog.csdn.net/kakaka2011/article/details/6636661 1. 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有 ...

  7. Android-Binder进程间通讯机制-多图详解

    本系列: Android-Binder进程间通讯机制-多图详解 一次Binder通信最大可以传输多大的数据?​​​​​​​ 关于Binder (AIDL)的 oneway 机制 概述 最近在学习Bin ...

  8. 管道实现进程间通讯 、WaitNamedPipe

    一.管道实现进程间通讯 主要的理论知识 1.什么是管道以及分类 管道是两个头的东西,每一个头各连接一个进程或者同一个进程的不同代码,依照管道的类别分有两种管道,匿名的和命名的:依照管道的传输方向分也能 ...

  9. QSharedMemory共享内存实现进程间通讯(IPC)及禁止程序多开

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QSharedMemory共享内存实现进程间通讯(IPC)及禁止程序多开     本文地址:h ...

最新文章

  1. Python脚本:将mol2分子库文件拆分为单个mol2文件
  2. Linux :debian(ubuntu)下安装和使用haskell
  3. 11.cadence.通孔类封装创建[原创]
  4. Python 爬虫进阶篇-4行代码实现爬取指定网站中的全部图片实例演示及原理剖析
  5. 【控制】《复杂运动体系统的分布式协同控制与优化》-方浩老师-第5章-多欧拉-拉格朗日系统分布式编队跟踪控制
  6. python 数值运算 m op n_python数值运算 四则运算
  7. JVM六大垃圾回收器特点及区别
  8. Foundation框架: 9.OC中的集合类之四 - NSMutableDictionary的基本认识
  9. Java 多线程Thread
  10. 安卓手机充电慢_非 iPhone 12 独享,安卓系统手机也能用 MagSafe 充电|手机|安卓系统|充电器|安卓手机...
  11. react学习(51)--避免死循环
  12. c语言实现http服务器_基于postman实现http接口测试过程解析_服务器其它
  13. python函数模块_06.Python函数和模块
  14. python -pymysql的操作
  15. 解决百度BMR的spark集群开启slaves结点的问题
  16. 【纸牌识别】基于matlab形态学扑克牌识别【含Matlab源码 1352期】
  17. android ip计算,子网掩码怎么算_ipv6子网掩码计算器_掩码计算器android
  18. Vue3大菠萝pinia笔记
  19. ionic3生产打包javascript内存溢出的解决方法
  20. 11 RabbitMQ消息的可靠性保障

热门文章

  1. 冰雪传奇刷怪计时器_冰雪传奇打金攻略:这样的装备才能称得上逆天极品
  2. 31条指令单周期cpu设计(Verilog)-(五)整体数据通路图设计
  3. 成都web前端开发怎么样?薪资高吗?
  4. 为什么程序员总是在熬夜?
  5. TIME_WAIT的意义
  6. 鸿蒙武器手机,鸿蒙野心不止手机,是华为下个十年最强武器?
  7. 平面设计视频教程-传智-专题视频课程
  8. 关于android 7.0全面屏,底部虚拟导航键 适配问题
  9. 小鼠是如何找出毒药的?
  10. 联邦图神经网络:概述、技术和挑战