NSPort是一个描述通信通道的抽象类。通信发生在两个NSPort对象之中,这两个NSPort对象通常属于不同的进程或任务。分发对象系统使用NSPort对象来返回或发送NSProtMessage对象。你应该尽可能使用分发对象来完成应用间通信,必要时才使用NSPort对象。

要接收发来的消息,NSPort对象必须作为输入源被添加到NSRunLoop对象中。NSConnection对象在初始化时自动添加它们的接收端口。

当一个NSPort对象接收到一个端口消息,便把这条消息在handleMachMessage:或者handlePortMessge:消息中传送给它的代理。这个代理应该至少实现其中一个方法来处理要接收的消息,不管你想要实现什么功能。handleMachMessage:提供了一个早期的Mach内核消息,它以msg_header_t结构体为起始。handlePortMessage:提供了一个作为NSPortMessage对象的消息,这个对象是Mach消息面向对象的替代品。如果没有设置代理,这个NSPort对象会自己处理这条消息。

当你使用NSPort对象完成消息处理,你必须首先使这个端口对象失效,然后再发送release消息。类似的处理还有,如果你的应用使用了垃圾回收,你必须先使端口失效,然后移除它的一些强引用。如果你没有是端口失效,就可能引起内存泄漏。要使端口失效,请调用invalidate方法。

基础框架定义了三个具体的NSPort子类。NSMachPort和NSMessagePort只允许本地(在一样的机器上)通信。NSSocketPort允许本地和远程两种通讯,但是对于本地通信,NSSocketPort会更加耗费资源。创建NSPort对象,可以使用allocWithZone:或port,NSMachPort对象创建例外。

那么这四局做了什么?

NSPort的更多相关文章

  1. NSPort与NSRunloop的关系是流与消息调度的关系

    NSPort与NSRunloop的关系是流与消息调度的关系. NSPort 将流插入到消息调度队列: 相当于 Socket将流插入到应用一样 - (void)launchThread { NSPort ...

  2. RunLoop 总结:RunLoop的应用场景(一)

    参考资料 好的书籍都是值得反复看的,那好的文章,好的资料也值得我们反复看.我们在不同的阶段来相同的文章或资料或书籍都能有不同的收获,那它就是好文章,好书籍,好资料.关于iOS 中的RunLoop资料非 ...

  3. Cocoa深入学习:NSOperationQueue、NSRunLoop和线程安全 (转)

    目前在 iOS 和 OS X 中有两套先进的同步 API 可供我们使用:NSOperation 和 GCD .其中 GCD 是基于 C 的底层的 API ,而 NSOperation 则是 GCD 实 ...

  4. 我的runloop学习笔记

    前言:公司项目终于忙的差不多了,最近比较闲,想起叶大说过的iOS面试三把刀,GCD.runtime.runloop,runtime之前已经总结过了,GCD在另一篇博客里也做了一些小总结,今天准备把ru ...

  5. iOS中的一些细节

    1. 在使用单例模式时一般使用allocWithZone 因为alloc最终还是会调用allocWithZone进行分配空间 2. synchronized 线程锁(互斥锁) 优点:能防止多线程抢夺资 ...

  6. 4.1/4.2 多线程进阶篇<上>(Pthread & NSThread)

    本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人 “简书” 本文源码 Demo 详见 Githubhttps://github.com/shorfng ...

  7. iOS-RunLoop

    简单的说run loop是事件驱动的一个大循环,如下代码所示int main(int argc, char * argv[]) {     //程序一直运行状态     while (AppIsRun ...

  8. IOS RunLoop 常驻线程的实现

    线程常驻,正如其名,我们要实现的事让一个线程长期存在,不被销毁. 这时会有人说,那还不简单吗. 但是这里我们要实现的事如何让线程座椅待命,而且并不是主线程. 首先介绍一下正常情况下的线程使用. // ...

  9. iOS runloop初步学习

    参考: http://www.aichengxu.com/view/43297111. 定义:其实它内部就是do-while循环,在这个循环内部不断地处理各种任务(比如Source.Timer.Obs ...

随机推荐

  1. 从零开始玩转JMX(二)——Condition

    Notification 一个MBean提供的管理接口允许代理对其管理资源进行控制和配置.然而,对管理复杂的分布式系统来说,这些接口知识提供了一部分功能.通常,管理应用程序需要对状态变化或者当特别情况 ...

  2. Css初步认识

    css 美化页面 cascading style sheet 层叠样式表 css语法:  选择器{ css属性名:属性值;css属性名:属性值;} css引入方式:  方式一:内联样式表   通过标签 ...

  3. java直接计算一个算术题

    import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script.ScriptE ...

  4. Python学习札记(二十) 函数式编程1 介绍 高阶函数介绍

    参考: 函数式编程 高阶函数 Note A.函数式编程(Functional Programming)介绍 1.函数是Python内建支持的一种封装,我们通过一层一层的函数调用把复杂任务分解成简单的任 ...

  5. 51Nod 1521 一维战舰

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1521 思路:先计算出一开始最多能放多少艘战舰,然后每次输入一个点后,找到 ...

  6. 什么是ZooKeeper(一)(通俗易懂)

    以前在做别的项目时用过zk,但没有过多深入的学习,本着通俗易懂.简单方便学习成本低的方式,建议大家耐心看完,如果文章中有不清楚的地方,可发私信进步探讨! 学习zk共分为二部分,第一部分主要以理论为主. ...

  7. duff's device

    const duffDevice = (items, process) => { let iterations = Math.floor(items.length / 8); let start ...

  8. CSS 左边div固定,右边div自适应

    有时候我们会有这样的需求,如图,aside是导航或者某些链接,右边的main是显示重要的内容,左边需要定宽,右边的main能够自适应剩余的宽度: <!DOCTYPE html PUBLIC &q ...

  9. SQL 2008R2还原对于服务器失败 备份集中的数据库与现有数据库 3154错误

    以前用sql server 2005的时候就遇到过类似的问题,数据库在别的服务器上备份后,在本机无法还原,这次终于找到了解决方案,网上的没有找到类似的,希望能帮到大家! 原因分析:在SQL Serve ...

  10. hdu4347The Closest M Points kdtree

    kdtree讲解: https://blog.csdn.net/qing101hua/article/details/53228668 https://blog.csdn.net/acdreamers ...