1、基本介绍
1.1、OSSpinLock
1.1.1、自旋锁,iOS10及以后版本已标记过期;
1.1.2、锁定状态下,其他线程访问时处于忙等状态
1.1.3、存在优先级反转的问题而被放弃;
1.2、os_unfair_lock
1.2.1、互斥锁
1.2.2、锁定状态下,其他线程访[……]
Category Archives: C/C++
Objective-C消息发送机制原理objc_msgSend( )
0、方法调用原理
0.1、以[reciver method]为例,实际上是objc_msgSend(reciver, @selector(method), …argments);
0.2、OC方法调用转换为objc_msgSend函数调用,方法调用者、方法名为该函数的前2个参数;
0.3、OC对象本质为结构体,参考:剖析Objective-C对象本质结构MJClassInfo
1、消息发送(查找方法)
1.1、如果方法调用者为nil,直接返回(不报错);
2.2、方法调用者通过isa指针查找方法接收者,方法接收者查找对象中的cache,如果没有则查找对象中方法列表class_rw_t;
2.3、如果找到则调用并缓存在cache中,否则通过superclass在父类中的cache,class_rw_t中查找;
2.4、如果找到则调用并缓存在cache中,否则再通过superclass的superclass查找,直到superclass为空;
2.5、如果在整个继承体系中都没有找到目标方法,调用方法接收者的动态解析方法(如果解析过则进入方法转发);
2、动态解析[……]
C++标准库中map的简单使用示例
1、在STL中,map是一种关联式容器,包含键值对即元素为pair;
2、除此之后,map还是一种有序容器,这和Obj-C不一样,Obj-C中相对应的数据类型为Dictionay,这是一个无序容器;
3、与list、vector不一样的地方在于,map指定了键值对类型后,容器中元素是接收了键值对[……]
C++STL中list与vector在效率方面的比较
1、vector的数据结构类似数组,在内存中为一片连续的存储空间;
2、list的数据结构为链表,每个元素中都保存了下一个元素的地址,空间可以不连续;
3、基于两者数据结构的特点,vector的随机访问速度快,list的增删操作快;
4、以1亿个元素的分别以list与vector的方式存储来比[……]
STL中三大组件(容器+迭代器+算法)的最简单组合使用
1、STL全称为Standard Template Library,标准模板库,C++开发中最为常用的标准库;
2、STL有点类似于ObjC中的Foundation库,语言之间的类比有助理解,融汇贯通;
3、STL中最重要的三大组件为容器、迭代器、算法;
4、迭代器为容器与算法之间的桥梁;[……]