UI绘制原理 发表于 2018-05-26 | 分类于 Cocoa Touch 图像显示原理CPU与GPU是通过总线连接起来,通过CPU输出一个位图,经由总线传输在合适的时机上传到GPU,GPU获取到位图后,会进行图层渲染、纹理合成,将结果放入帧缓存区中,由视频控制器根据VSyn信号,在指定时间之前提取帧缓存区中的屏幕显示内容,最终显示到手机屏幕上。 CPU与GPU分别做了什 ... 阅读全文 »
事件传递与响应者链条 发表于 2018-05-25 | 分类于 Cocoa Touch 点击了屏幕上的一个View,事件是怎么找到这个View的呢?这个View又是怎么响应这个传递过来的事件的呢? 事件传递当点击了屏幕上的一个View后,系统会产生一个UIEvent事件,这个事件被加入到由UIApplication管理的一个事件队列中,UIApplication会从事件队列中取出最前面 ... 阅读全文 »
Block介绍 发表于 2018-05-21 | 分类于 Objective-C Block介绍Block是将函数及其执行上下文封装起来的对象。 下面代码的改写过程,大体能够体现出Block是如何实现的 1234567//相当于block中用到的变量int varId = 1;//相当于block的实现主体void detail_func(int event){ ... 阅读全文 »
Runloop 发表于 2018-05-21 | 分类于 Objective-C 什么是RunLoop? RunLoop是通过内部维护的事件循环来对事件/消息进行管理的一个对象。 事件循环: 没有消息处理时,休眠以避免资源浪费(用户态通过系统调用进入内核态) 有消息需要被处理时,被立刻唤醒(内核态到用户态) 12345678int main(int argc, char * ... 阅读全文 »
运行时之三:关联对象 发表于 2018-05-20 | 分类于 Objective-C 通过运行时的关联对象我们可以为分类添加“成员变量”,但是这里所实现的效果只是看上去是给类添加了成员变量,并非真实的,因为在运行期,对象的内存布局已经确定,如果添加实例变量就会破坏类的内部布局,这对编译型语言来说是灾难性的。那这个“成员变量”到底被添加到哪里去了呢? 关于这个问题,我们可以通过查看源码 ... 阅读全文 »
运行时之二:分类 发表于 2018-05-20 | 分类于 Objective-C 由于需求的变化,要为原有类扩展新功能,我们一般有两个方法:继承和组合。而category就是组合的一种具体实现技术。在Objective-C 2.0中,提供了category这个语言特性,可以动态地为已有类添加新行为。 分类功能及特点我们使用分类可以做哪些事情呢? 扩展已有类(为已存在的类添加方法 ... 阅读全文 »
Git常用命令 发表于 2018-05-18 | 分类于 tool 配置命令1git config 操作命令123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263//由工作区提交到暂存区g ... 阅读全文 »
ProtocolBuffer在iOS中的使用 发表于 2018-05-10 | 分类于 tool Mac下环境搭建在Mac上安装protobuf有两种方式 Homebrew的方式安装 下载源文件自行编译 homebrew的方式很简单,就一条命令: 1brew install protobuf 验证是否成功 12protoc --versionlibprotoc 3.5.1 如果报错如下 1z ... 阅读全文 »
Python3基本语法 发表于 2018-04-28 | 分类于 Python Python 工具PylintPylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8,具体信息,请参阅参考资料)和有潜在问题的代码。 pippip 是一个现代的,通用的 Python 包管理工具。提 ... 阅读全文 »