-
Notifications
You must be signed in to change notification settings - Fork 8
Open
Description
- 在编译期找到合适的位置帮我们插入合适的 retain ,release 等这样的内存管理方法
- 在运行时也会做一些优化比如:
- weak 修饰的变量能够在引用计数为0 时被自动设置成 nil
- 合并对称的引用计数操作。比如将 +1/-1/+1/-1 直接置为 0.
- ARC 在运行时检测到类函数中的 autorelease 后紧跟其后 retain,此时不直接调用对象的 autorelease 方法,而是改为调用 objc_autoreleaseReturnValue。 objc_autoreleaseReturnValue 会检查当前方法返回之后即将要执行的那段代码,若那段代码要在返回对象上执行 retain 操作,则设置全局数据结构中的一个标志位,而不执行 autorelease 操作,与之相似,如果方法返回了一个自动释放的对象,而调用方法的代码要保留此对象,那么此时不直接执行 retain ,而是改为执行 objc_retainAoutoreleasedReturnValue函数。此函数要检测刚才提到的标志位,若已经置位,则不执行 retain 操作,设置并检测标志位,要比调用 autorelease 和retain 更快。
Metadata
Metadata
Assignees
Labels
No labels