摘要:▶ AutoreleasePool 本节开始,我们一步一步来窥视自动释放实现原理!首先在 main函数 中创建实例对象 将 main.m 转换成 C++代码 C++ 对应的 OC代码如下 同样地在 C++文件 中找到结构体 __AtAutoreleasePool 当代码执行到第 5 行声明局部变量
阅读全文
摘要:▶ 引用计数 A. 我们知道 64bit 系统中的引用计数存放在 isa 中 打开 has_sidetable_rc 可以看到引用计数的缩写 refcnts,它是一个存放对象引用计数的散列表 B. 下面打开 rootRetainCount 通过 sidetable_getExtraRC_nolock
阅读全文
摘要:▶ 什么是 Tagged Pointer 从 bit64 开始 iOS 就引入了 Tagged Pointer 技术,用来优化 NSNumber、NSDate、NSString等小对象的存储。在没有 Tagged Pointer 之前这些小对象同样要使用动态分配内存、维护引用计数等 NSNumber
阅读全文
摘要:▶ 给分类添加成员变量 关于分类很多说法是只能添加方法接口、属性且不会生成成员变量、协议等。它并不是绝对不能添加成员变量,虽然在分类结构体中是没有成员变量列表的,但如想要实现也非难事:通过关联对象添加成员变量 在了解系统如何给分类添加成员变量前,我们先用 3种 方式尝试为 Animal+Pet 添加
阅读全文
摘要:▶ 什么是对象 OC 中所有对象都是由其所对应的类实例化后得来的!其实类本身也是一种对象,几乎所有类都是 NSObject 的子类 @interface NSObject <NSObject> { Class isa; } @end Class 是一个结构指针的 typedef 定义 typedef
阅读全文