用NSConnection实现不同进程间的通信
2015-10-30 16:26
337 查看
用NSConnection实现不同进程间的通信
发表于 2012-04-10 | 分类于 pieces| 10
条评论
在Mac应用程序开发中可能会这样做:让程序的某部分逻辑放置在一个独立的进程之中,如文件或程序的监控、Crash报告的回传等等,但不同的进程之间的通信就再所难免,今天尝试了通过NSConnection实现不同进程间的通信,实在是非常方便小巧,使用起来也很灵活,好的,帖代码。
程序1(线程1)中建立一个类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | - (id)init { self = [super init]; if (self) { // renderThread线程维护NSConnection的通信. renderThread = [[NSThread alloc] initWithTarget:self selector:@selector(threadMain) object:nil]; } return self; } - (void)threadMain { NSAutoreleasePool * pool = [NSAutoreleasePool new]; NSRunLoop* myRunLoop = [NSRunLoop currentRunLoop]; //setup server connection NSConnection *serverConnection = [NSConnection new]; //设置self为NSConnection的代理对象 [serverConnection setRootObject:self]; //connectionName是注册名称 [serverConnection registerName:@"connectionName"]; [myRunLoop run]; [pool release]; } - (void)test { //do something NSLog("test"); } |
下面是程序2(线程2)的实现部分:
1 2 3 4 | //这样就可以通过name取得注册的NSConnection的代理对象 NSDistantObject *drawer = [NSConnection rootProxyForConnectionWithRegisteredName:@"connectionName" host:nil]; //调用代理对象中的方法,就跟普通对象一样,当然如果为了让代理对象的方法可见,可以定义公共的协议protocol [drawer performSelector:@selector(test)]; |
相关文章推荐
- 解决ScrollView与ListView事件冲突
- CheckBox与Listview的关联使用
- PHP常用魔术变量常量
- c#反射机制学习和利用反射获取类型信息
- thread的run和start区别
- Volley 图片加载相关源码解析
- Win8.1系统录音文件保存在哪?Win8.1查找录音机录音文件目录的方法
- Storm平台搭建2--storm的安装
- EXCEL实战用法
- SQL空和NULL的区别
- 测试程序的时候用到写参数或者错误日志的几个方法,用来方便发现错误
- OPENGL基本了解(十四) (光照基本数据)
- LNMP环境编译安装centos5x/nginx_1.4/mysql_5.6/php_5.4
- QProgressDialog使用时不显示的可能问题 #Qt #C++
- 网格简化
- 多用户同时处理同一条数据解决办法
- ArcGIS Engine追加功能
- http://www.shippingcity.com/
- shell 脚本完成对日志文件的提取之grep 学习
- 浏览器兼容性问题