mmap基础概念
内存映射(mmap),就是将文件的磁盘扇区映射到进程的虚拟内存空间的过程,即将一个文件映射到进程的虚拟空间,实现文件磁盘地址和进程虚拟空间中一段虚拟地址的一一对应关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。
Method swizzling 用于改变一个已经存在的 selector 的实现。因为 method swizzling 可以通过交换 selector 来改变函数指针的引用。
对于iOS端,实现屏幕共享需要两个关键技术:屏幕内容采集和媒体流广播。前者需要系统提供相关权限,可以让开发者采集到app或者整个系统层面的屏幕上的内容,后者需要系统提供采集到实时的视频流和音频流,这样才能通过推流到服务器,实现媒体流的广播。
利用 Objective-C 语言的 runtime 特性, 通过 Method Swizzling 技术可以实现 hook OC 类的某个方法,但是怎么 hook block 呢?比如想要修改 block 的实现我们该怎么做?
IM全称是『Instant Messaging』,中文名是即时通讯。在移动互联网时代,IM产品已经成为工作和生活中必不可少的工具,比如QQ,微信,钉钉等。还有一些非以IM系统为核心的应用,最典型的如一些在线游戏、社交应用,IM也是其重要的功能模块。可以说,IM系统已经是任何一个带有社交属性的应用需要具备的基础功能,网络上对于这类系统的设计与实现的讨论也越来越多。
Objective-C 内存管理中的一个重要概念是 autorelease,自动释放。它类似于C语言中的自动变量的特性。回忆一下C语言中的自动变量:程序执行时,若某个自动变量超出其作用域,该自动变量将被自动废弃,不可再访问。autorelease 会像C语言的自动变量那样来对待对象实例,当超出变量作用域时,对象实例的 release 方法被调用。
最近对一个现有项目进行重构,感觉swift出来这么久了,还没用它进行实际项目的编写,所以打算利用这次机会重新熟悉下swift。由于项目依赖的私有库或者开源库大都是由Objective-C写的,当我创建一个swift项目后,首先考虑的是怎么在swfit项目中调用Objective-C接口(项目使用cocoapods管理)。
我们知道,Objective-C 是一门面向对象的动态语言,是C语言的超集。而 OC 之所以具有这些特性,本质上在于 Runtime 库。Runtime 由C语言和汇编语言编写,是 OC 语言的“基石”,它定义了 OC 语言的基础数据结构;类与对象的相关操作函数;方法调用、消息机制;Protocol 和 Category 等。理解 Objective-C 的 Runtime 可以帮我们更好的了解这个语言,适当的时候还能对语言进行扩展,从系统层面解决项目中的一些设计或技术问题。本文从 Runtime 层研究 OC 语言的方法调用、消息机制。
看到一篇有趣的文章《Git is a purely functional data structure》,作者:Philip Nilsson。它从函数式数据结构的角度讲解了Git的原理,把 Git 的 commit,branch 等操作和数据的不变性做了类比。本文将这篇文章搬过来,做个记录。