iOS开发多线程篇—线程间的通信

  • 一、简单说明

- [x] 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信

  • 线程间通信的体现

1个线程传递数据给另1个线程

在1个线程中执行完特定任务后,转到另1个线程继续执行任务

  • 线程间通信常用方法
- [x] (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;

- [x] (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait;

  • 线程间通信示例 – 图片下载

- [x] 主线程-添加UIImageView-子线程-下载图片-下载完成-主线程显示图片


iOS 进程间通信8种方式

  • 1、URL scheme

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

  • 2、Keychain

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

  • 3、UIPasteBoard

- [x] uipasteboard是剪切板功能,因为iOS 的原生空间UItextView,UItextfield,UIwebView ,我们在使用时如果长按,就回出现复制、剪切、选中、全选、粘贴等功能,这个就是利用系统剪切板功能来实现的。

  • 4、UIDocumentInteractionController

- [x] uidocumentinteractioncontroller 主要是用来实现同设备上APP之间的贡献文档,以及文档预览、打印、发邮件和复制等功能。

  • 5、Local socket

- [x] 原理:一个APP1在本地的端口port1234 进行TCP的bind 和 listen,另外一个APP2在同一个端口port1234发起TCP的connect连接,这样就可以简历正常的TCP连接,进行TCP通信了,然后想传什么数据就可以传什么数据了

  • 6、AirDrop

- [x] 通过 Airdrop实现不同设备的APP之间文档和数据的分享

  • 7、UIActivityViewController

- [x] iOS SDK 中封装好的类在APP之间发送数据、分享数据和操作数据

  • 8、APP Groups

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


- [x] 进程间通信 :从一个App跳到另外一个App如从打地鼠练习App 跳转到 卖票App

- [x] 线程间通信 :通过performSelector系列的方法 可以实现 各种线程间的通信(通信 :调用与传参)