第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。然而却没有与之对应的释放操作来抵消。因为这些规则很容易表述,所以计算机可以简单地将其套用在程序上,从而分析出有内存泄漏问题的对象。这正是 “静态分析器” 要做的事。

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

 

时间: 2024-08-07 08:38:27

第30条:以ARC简化引用计数的相关文章

ARC自动引用计数

启动自动引用计数选项. 选择项目的属性文件 --> 搜索 automatic Reference --> Objective-C Automatic Reference Counting --> Yes ARC 和手动管理内存的区别. ARC 并不是GC在运行中判断引用计数是否为0,从而清除内存.而是在代码编译之前通过静态分析工具Analyze自动生成内存管理代码. 开启ARC后,不能再使用retain等系列手动内存管的方法,可以重写dealloc方法但不能再方法中[super deal

ARC————自动引用计数

一.内存管理/引用计数 1.引用计数式内存管理的方式(下面四种) 对象操作 OC方法 生成并持有对象 alloc/new/copy/mutableCopyd等方法 持有对象 retain方法 释放对象 release方法 废弃对象 dealloc方法 这些有关内存管理的方法,实际上不包括在该语言中,而是包含在Cocoa框架中用于OS X,IOS应用开发. Cocoa框架中的Foundation框架库的NSObject类担负内存管理的职责. OC内存管理中的alloc.retain.release

ARC自动引用计数学习笔记

1. 在 ARC 中,所有*outlet*属性都推荐使用 weak,这些 view 对象已经属于 View Controller 的 view hierarchy,不需要再次定义为 strong(ARC 中效果等同于 retain).唯一应该使用 strong 的 outlet 是 File's Owner,连接到 nib 的顶 层对象. 因为 tableView 和 searchBar 这两个 property 定义为 weak,当它们指向的 对象被释放时,这两个变量会自动设置为 nil. 当

OC17内存管理和自动引用计数

// //  ViewController.m //  OC17内存管理和自动引用计数 // //  Created by Zoujie on 15/10/25. //  Copyright ? 2015年 Zoujie. All rights reserved. // #import "ViewController.h" #import "Fraction.h" @interface ViewController () @end @implementation V

ARC-环境下如何查看引用计数的变化

一,新建立一个工程,用于测试引用计数的变化. 二,找到如下路径Build Phases---->Compile Sources---->AppDelegate.m 三,选中AppDelegate.m文件,如图所示. 四,将AppDelegate.m的Compiler Flags设置为"-fno-objc-arc".如图所示. 这是因为我们要在AppDelegate.m文件中写我们的测试的代码.而工程默认是ARC管理内存的.所以,我们将其用参数"-fno-objc-

第九讲.内存管理初级.(内存管理的方式,引用计数机制及影响计数的各个方法,dealloc方法,内存管理的基本原则,掌握copy的实现)

一.内存管理的方式. 1.进行内存管理的原因: 1>.由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等. 管理范围:任何继承NSObject的对象,对其他的基本数据类型无效. 2>.本质原因是因为对象和其他数据类型在系统中的存储空间不一样,其它局部变量主要存放于栈中,而对象存储于堆中,当代码块结束时这个代码块中涉及的所有局部变量会被回收,指向对象的指

第29条:理解引用计数

自动引用计数(Automatic Reference Counting, ARC) 垃圾收集器: 从Mac OS X 10.8开始,“垃圾收集器”(gargae collector)已经正式废弃了. 每个对象都有个计数器,用以表示当前有多少个事物想令此对象继续存活下去.叫做“保留计数”(retain count),也可以叫“引用计数”(reference count). 由三个方法操作计数器: reatain 递增 release 递减 autorelease 递减,自动释放池(autorele

swift:自动引用计数ARC

Swift自动引用计数:ARC Swift使用自动引用计数(ARC)来跟踪并管理应用使用的内存.大部分情况下,这意味着在Swift语言中,内存管理"仍然工作",不需要自己去考虑内存管理的事情.当实例不再被使用时,ARC会自动释放这些类的实例所占用的内存. 然而,在少数情况下,为了自动的管理内存空间,ARC需要了解关于你的代码片段之间关系的更多信息.本章描述了这些情况,并向大家展示如何打开ARC来管理应用的所有内存空间. 注意:引用计数只应用在类的实例.结构体(Structure)和枚举

Swift 自动引用计数机制ARC

Swift 使用自动引用计数(ARC)这一机制来跟踪和管理你的应用程序的内存.通常情况下,Swift 的内存管理机制会一直起着作用,你无须自己来考虑内存的管理.ARC 会在类的实例不再被使用时,自动释放其占用的内存. 然而,在少数情况下,ARC 为了能帮助你管理内存,需要更多的关于你的代码之间关系的信息.本章描述了这些情况,并且为你示范怎样启用 ARC 来管理你的应用程序的内存. 注意: 引用计数仅仅应用于类的实例.结构体和枚举类型是值类型,不是引用类型,也不是通过引用的方式存储和传递. 自动引