1. 散列表
散列表的本质是哈希表
。散列表在手机上有8
张,在模拟器或者其他设备上为64
张。散列表里面有锁
,引用计数表
和弱引用表
。其中锁用来保证线程安全,引用计数表是用来存超过最大个数的引用计数的,弱引用表则是用来储存__weak修饰的变量和weak修饰的属性等。如果在整个系统中只有一张散列表,那么在使用过程中开表和关表,为了保证线程安全就要开锁和解锁,如果所有对象挤在一个表里,就会导致性能等消耗。多张表还可以及时回收相关内存。
2. 弱引用表
这里的打印结果是什么呢?运行后发现是1
和 2
,按道理来说,这里的引用计数应该是 1
和 1
, 那么为什么weakObjc的引用计数是2呢?
在alloc
的时候_class_createInstanceFromZone
调用objc->initIsa
会进行引用计数赋值为1的操作。而weak
修饰的就不会进行引用计数+1的操作,所以objc引用计数为1。<