原文链接: https://eternityi.github.io/2017/10/09/swift-algorithems-basic-01/ 数据结构 数组 Array 堆栈、队列 Stack/Queue 优先队列(堆) Priority Queue(heap) 链表(单链表/双向链表)LinkedList(single/double) 树、二叉树 Tree/BinaryTree 二叉搜索树 Binary Search Tree 哈希表 HashTable 集合 Disjoint Set 前缀树 Trie Tree 布隆过滤器 BloomFilter LRU Cache 分析常见的数据 ...
iOS RunLoop 原理总结 01
RunLoop简介一般来说,一个线程只能执行一个任务,执行完就会退出,如果我们需要一种机制,让线程能随时处理时间但并不退出,那么 RunLoop 就是这样的一个机制。Runloop是事件接收和分发机制的一个实现。 RunLoop实际上是一个对象,这个对象在循环中用来处理程序运行过程中出现的各种事件(比如说触摸事件、UI刷新事件、定时器事件、Selector事件),从而保持程序的持续运行;而且在没有事件处理的时候,会进入睡眠模式,从而节省CPU资源,提高程序性能。 RunLoop 基本作用 保持程序持续运行,程序一启动就会开一个主线程,主线程一开起来就会跑一个主线程对应的RunLoop,RunL ...
iOS RunTime Advance 03 (消息转发)
消息转发前文介绍了进行一次发送消息会在相关的类对象中搜索方法列表,如果找不到则会沿着继承树向上一直搜索直到继承树根部(通常为NSObject),如果还是找不到并且消息转发都失败了就回执行 doesNotRecognizeSelector: 方法报 unrecognized selector 错。 但在抛出异常之前,还有 三次机会 按以下顺序让你拯救程序: Method Resolution 动态方法解析 Fast Forwarding 备用接收者 Normal Forwarding 完整消息转发 消息转发流程简图: 动态方法解析 Method Resolution首先,OC运行时会调用 + ...
iOS RunTime Advance 02 (方法缓存详解)
objc_msgSend函数当某个对象使用语法[receiver message]来调用某个方法时,其实[receiver message]被编译器转化为: id objc_msgSend ( id self, SEL op, ... ); 现在让我们看一下objc_msgSend它具体是如何发送消息: 首先根据receiver对象的isa指针获取它对应的class 优先在class的cache查找message方法,如果找不到,再到methodLists查找 如果没有在class找到,再到super_class查找 一旦找到message这个方法,就执行它实现的IMP 我们都知道Obje ...
iOS RunTime Advance 01
RunTime一直是iOS开发中非常重要的而且必须要理解的东西,最近在学习RunTime,有自己的一些心得,现在记录下来,便于以后查阅理解 Objective-C 的 Runtime 机制可以帮我们更好的了解OC语言,适当的时候还能对语言进行扩展,从系统层面解决项目中的一些设计或技术问题。 什么是RunTime Objective-C 扩展了 C 语言,并加入了面向对象特性和 Smalltalk 式的消息传递机制。而这个扩展的核心是一个用 C 和 汇编 写的 Runtime 库。它是 Objective-C 面向对象和动态机制的基石。苹果和GNU各自维护一个开源的 runtime 版本,这两个 ...
Node.js 01
Node 简介官方地址:https://nodejs.org/en/ Node是JavaScript语言的服务器运行环境 所谓“运行环境”有两层意思:首先,JavaScript语言通过Node在服务器运行,在这个意义上,Node有点像JavaScript虚拟机;其次,Node提供大量工具库,使得JavaScript语言与操作系统互动(比如读写文件、新建子进程),在这个意义上,Node又是JavaScript的工具库 Node内部采用Google公司的V8引擎,作为JavaScript语言解释器;通过自行开发的libuv库,调用操作系统资源 Node采用V8引擎处理JavaScript脚本,最大 ...