第30条:以ARC简化引用计数

Posted CHM

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第30条:以ARC简化引用计数相关的知识,希望对你有一定的参考价值。

  本条要点:(作者总结)

 

 

  引用计数这个概念相当容易理解。需要执行保留与释放操作的地方也很容易就能看出来。所以 Clang 编译器项目带有一个 “静态分析器”(static analyzer)。用于指明程序里引用计数出问题的地方。举个例子,假设下面这段代码采用手工方式管理引用计数:

1    if ([self shouldLogMessage]) {
2 
3     NSString *message = [[NSString alloc] initWithFormat:@"I am object, %p", self];
4 
5     NSLog(@"Message = %@", message);
6 
7     } 

  此代码有内存泄漏问题,因为 if 语句块末尾并未释放 message 对象。由于在 if 语句之外无法引用 message,所以此对象所占的内存泄漏了(这里“泄漏”的意思是:没有正确释放已经不再使用的内存)。判定内存是否泄漏所用的规则很简明:调用NSString 的 alloc 方法所返回的那个 message 对象的保留计数比期望值要多 1。然而却没有与之对应的释放操作来抵消。因为这些规则很容易表述,所以计算机可以简单地将其套用在程序上,从而分析出有内存泄漏问题的对象。这正是 “静态分析器” 要做的事。

  静态分析器还有更为深入的用途。既然可以查明内存管理问题,那么应该也可以根据

 

 

以上是关于第30条:以ARC简化引用计数的主要内容,如果未能解决你的问题,请参考以下文章

第29条:理解引用计数

[OC学习笔记]ARC与引用计数

再次理解ARC引用计数

自动引用计数ARC

[OC学习笔记]ARC与引用计数

ARC以前的故事