大厂 mars
Union Find 并查集 ( 深度优先,一路递归过去 )
Disjoint Set 不相交
不相干集合
bijection 双向单射
C �语言的 void * 指针,
相当于 OC 的 id
runloop �两:
-
等待事件处理, wait
-
通知去处理事件, observe
内存
- weak 表
地址:Union
(并查集)
Union { 数量, [ 对象数组] }
SideTable -> WeakTable 表 -> WeakEntry 条目
- ARC, 引用计数表
因为多指向,可以等价 哈希表,和并查集
地址: 数量
- 关联对象表, AssociationsHashMap
是 dyld, 不是 lldb
没用的环境变量
OBJC_PRINT_REPLACED_METHODS
OBJC_PRINT_LOAD_METHODS
可以在执行load方法以及加载category的时候打印log信息
讲故事,使用数据结构,
就够了
操作代码,不是很值得提到
面试,就是讲故事
Page 69
信号量 wait
signal
控制
load 方法,调用顺序:
父类 >子类> 分类。 类和分类中的load方法都会执行 父类永远大于子类,子类永远大于分类 如果有多个分类会按照编译顺序执行,先编译先执行
Fun With the Objective-C Runtime: Run Code at Deallocation of Any Object
dyld 是 the dynamic link editor 的缩写,
它是苹果的动态链接器
循环缓冲区,
一个容量,
一个指针
mutex 互斥锁,
相当于 Semaphore 的数目为 2
区别如图:
C++ 异步, future
-
future get result 未来,获取结果
-
promise pass argv 保证,将要传参
C++ 实现 async, 子线程做事情,不用管
开线程,完了
C++ 实现 async, 子线程算结果,主线程打印
开线程,
有线程共享的变量,
互斥锁,mutex
条件变量, 保证代码运行的先后 conditional_variable
锁的例子是, 厕所
什么时候用 auto release pool,
for 循环
注册到 auto release pool,
就是把对象添加到,auto release pool,内部的数组
6 设计原则:
-
单一职责原则(Single-Responsibility Principle)
-
里氏代换原则(Liskov Substitution Principle)
-
依赖倒置原则(Dependence Inversion Principle),便于替换
-
接口隔离原则(Interface Segregation Principle)
-
迪米特原则(Law of Demeter), 最小知识原则,也就是封装 访问控制
-
开放-封闭原则(Open-Closed Principle) 不用改已有的代码, 出错就会少
内存对齐
字节对齐
那本书,注册就是写入
id __weak cat = obj;
- objc_storeWeak
把 obj 的地址 ( 赋值对象的地址 ) ,作为键,
把 cat 的,附有 __weak 修饰符的变量的地址作为值, 添加到 weak 表
- 如果 obj 为 0, 则把 weak 表中,所有的 obj 对应的变量地址清空,包括 cat
Objective-C runtime机制(7)——SideTables, SideTable, weak_table, weak_entry_t
SideTable 翻译过来的意思是“边桌”,可以放一下小东西。这里,主要存放了OC对象的引用计数和弱引用相关信息。
方法,无非增删改查, 本文有密集恐惧症,代码少少,
面试时,口述代码,厉害咯
用例好记, 处理的时机函数,谁没事记这个
啥是魅力,
说话慢一点呗
[iOS] 从 application delegate 引申三点
循环引用及两个及以上对象出现引用环,导致对象无法释放的情况。一般在block,delegate,NSTimer时容易出现这个问题。
除了 assgin 的情况,还有一些情况下 delegate 是被对象强引用 retain 的,比如 NSURLSession,delegate 将被 retain 到 session 对象失效为止。
byte dance,
我们更看重潜力,而不是你在某一方面的知识,
我们问的比较均衡
抖音社交方向,绍华
死锁,遇到过吗
NSDictionary 是不是线程安全的
__bright,
static ,
__block
block 为什么不能修改外部的临时变量