-
算法基础-02
hash 表的定义哈希表(hash table,也叫散列表),是根据键(key)直接访问在内存存储位置的数据结构;哈希表本质是一个数组,数组中每一个元素都是成为一个箱子,箱子中存放的是键值对;根据下标 index 从数组中取 value;关键是如何获取 index,这就是需要一个固定的函数(哈希函数),将 key 转换为 index;不论哈希函数设计的如何完美,都可能出现不同的 key 经过hash 处理后得到相同的 hash 值,这时候需要处理 hash 冲突哈希表优缺点优点:哈希表可以...…
-
算法基础-01
链表和数组的区别是什么?1、数组是将元素在内存中连续存放,有每个元素占用内存相同,可以通过下表迅速查找到相应的元素;但是如果要在数组中添加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中;同样道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素;如果应用需要快速访问数据,很少或者不插入和删除元素,就应该用数组;2、链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过存储在元素中的指针联系在一起的;比如:上一个元素有个指针指到下一个元素,以...…
-
iOS中处理图片的一些小tip
将UIImage保存磁盘,用什么方式最好?目前来说,保存UIImage有三种方式:1.直接用NSKeyedArchiver把UIImage序列化保存,2.用UIImagePNGRepresentation()先把图片转为PNG保存,3.用UIImageJPEGRepresentation()把图片压缩成JPG保存;实际上,NSKeyedArchiver是调用了UIImagePNGRepresentation进行序列化的,用它来保存图片是消耗最大的;苹果对JPG有硬编码和硬解码,保存成JPG...…
-
数组和指针的区别
数组名和指针的区别int arr[] = {1,2,3,4,5};定义一个数组,数组名为 arr,分别打印arr 本身的地址,arr 首元素的地址,以及arr本身;发现三者的值是相同的;变量的三要素:变量名称;变量,即名为arr变量自己的地址,该地址存储了 arr 变量;arr 的值,为所指对象的值;1.数组名取地址得到的是数组名所指元素的地址;对指针取地址得到的是指针变量自身的地址;2.数组名是常量指针,指针时变量指针;总结:1.数组名代表了一个指向数组首元素的常量指针,一经定义,不可更...…
-
深入理解OC方法缓存
objc_msgSend的消息分发的步骤: 判断receiver是否为nil,也就是objc_msgSend的第一个参数self,也就是要调用的哪个方法所属对象 从缓存里寻找,找到了则分发,否则 利用objc_class.mm中_class_lookupMethodAndLoadCache3方法去寻找selector 如果支持GC,忽略掉非GC环境的方法(retain等) 从本class的method list寻找selector,如果找到,填充到缓存中,并返回selector,...…
-
代理设计模式
NSProxy什么是NSProxy:NSProxy没有父类,是顶级类(根类),跟NSObject同等地位。NSProxy和NSObject都实现了“NSObject Protocol”。NSProxy设计时就是以“抽象类”设计的,专门为转发消息而生。实现要求:继承NSProxy的子类要实现自己的初始化方法,如“init”、“initWith”。重写- forwardInvocation:和- methodSignatureForSelector:方法,完成消息转发如此看来NSProxy确实...…
-
读书笔记
1、OC语言的起源:消息和函数的区别:使用消息结构的语言,其运行时所应执行的代码由运行环境来决定;而使用函数调用的语言,则由编译器来决定;如果代码中调用的函数是多态,那么在运行时就要按照“虚方法表”来查出到底应该执行那个函数实现;而采用消息结构的语言,不论是否多态,总是在运行时才会去查找索要执行的方法;实际上,编译器甚至不关心接受消息的对象时何种类型;接收消息的对象问题也要在运行时处理;其过程叫做“动态绑定”要点: OC为C语言添加了面向对象的特性,是其超集。OC使用动态绑定的消息结构,...…
-
内存结构
栈区(stack) : 由编译器自动分配并释放,一般存放函数的参数值,局部变量等;堆区(heap) : 由程序员分配和释放,如果程序员不释放,程序结束时,可能会由操作系统回收;全局区(静态区)(static) : 全局变量和静态变量的存储是放在一起的,初始化的全局变量和静态变量存放在一块区域,未初始化的全局变量和静态变量在相邻的另一块区域,程序结束后由系统释放;文字常量区 :存放常量字符串,程序结束后由系统释放;程序代码区 :存放函数的二进制代码;程序启动完毕后全局区,文字常量区,程序代码...…
-
CocoaAsyncSocket的使用
前言最近项目中涉及到socket通信这块;所以有幸有时间大概看了一下这一块;目前还在实现阶段,因此现在还不能去些具体的实现过程;现在只大概描述一下这几天看的资料和自己的一点心得吧;等项目实现之后会将具体的实现流程写出来以供大家参考;Socket通信基础Socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写read/write –> 关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket...…
-
HTML5 的新特性
什么是 HTML5?HTML5 将成为 HTML、XHTML 以及 HTML DOM 的新标准。万维网的核心语言、标准通用标记语言下的一个应用超文本标记语言(HTML)的第五次重大修改;2014年10月29日,万维网联盟宣布,经过接近8年的艰苦努力,该标准规范终于制定完成。HTML5 是最新的 HTML 标准。HTML5 是专门为承载丰富的 web 内容而设计的,并且无需额外插件。HTML5 拥有新的语义、图形以及多媒体元素。HTML5 提供的新元素和新的 API 简化了 web 应用程序...…