[学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十七章 内存管理和自动计数

原创 2015年07月09日 21:53:41

本书第十六章讲解的时关于文件和目录的操作,内容相对简单,再次略过。
第十七章的学习笔记经本人归纳整理呈献给大家。

内存管理:
- 为了被占用的内存能够再次利用,通过内存管理清理不用的内存。如果一个对象不再使用,就需要释放对象占用的内存

Part 1. 基本内存管理模型

Part 1.1 自动垃圾收集:

  • 系统能够自动贾策对象是否拥有其他的对象,当程序执行需要空间的时候,不再被引用的对象会被自动释放

Part 1.2 手工管理内存计数:

  • 每当创建引用到对象的时候需要为引用数+1。[myFraction retain]
  • 不再需要对象时,给对象发送release消息,为引用数-1。[myFraction release]
  • 当对象的引用计数为0的时候,系统就知道这个对象不再需要使用了。

Part 1.3 自动引用计数(ARC):

  • 系统会检测出何时需要保持对象,何时需要自动释放对象,何时释放对象。

Part 2. autoreleasepool块

  • 自动释放池并不包括实际的对象,只是包含对象的引用,对象将在自动释放池被清理的时候被释放。
  • 将对象添加到自动释放池维护的对象列表中:[result autorelease]
  • 清空自动释放池:给自动释放池添加drain消息
  • 当执行到autorelease块的末尾时,系统会释放池。
  • alloc,copy,mutable,new为前缀的方法创建的对象都不会被自动释放。需要在使用完这些对象后负责释放这些对象的内存。主动给这些对象发送release 消息,或者给对象发送autorelease消息将对象加入到自动释放池中。(主动释放对象
  • 方法返回对象的情况下:将对象放到自动释放池中 : return [result autorelease]Fraction *result = [[[Fraction alloc] init ] autorelease]

    • 管理每次由for循环迭代创建的临时对象
for (i = 0; i < n; ++i){
  @autoreleasepool{
    ...临时对象...
  }
}

Part 3. 时间循环和内存分配

  • 为了处理新事件,系统会创建一个新的自动释放池。
  • 调用应用中的一些方法来处理这个事件,方法返回后,系统清理自动释放池。
  • 创建的自动释放对象都被销毁,除非使用retain,才能从清空自动释放池的过程中幸存下来。

Part 4. 强变量 和 弱变量

强变量:

  • 所有对象的指针都是强变量
  • 旧对象的引用会在赋值前被释放。
  • 声明对象:__strong Fraction *f1
  • 声明属性:@property(strong, nonatomic) NSMutableArray *birdNames;

弱变量

  • 系统会追踪这个变量的引用。当引用的对象释放时,若变量会被设置为nil
  • 声明对象:__week UIView *parentView;
  • 声明属性:@property(week, nonatomic) UIView *parentView;

黑马程序员——Objective-C程序设计(第4版)学习笔记之17-内存管理和自动引用计数——黑马 IOS 技术博客

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 内存管理关心的是清理(回收)不用的内存,以便内存能够再次利用。 ...

[学习笔记—Objective-C]《Objective-C 程序设计 第6版》第三章 类,对象和方法 课后题解析 3-7

第三章的课后题多半都比较主观,在此只分享第七题。第七题几乎囊括了第三章左右的知识点,非常典型。以下是题目和本人编写的代码。为了方便起见,将头文件,实现文件,主函数文件合并到了一起。 3-7 定义一...

[学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十八章 复制对象

origin = pt; 将对象pt的地址复制到origin中。两个变量都指向内存中同一个地址 Foundation对象:将一个变量赋值给另一个对象仅仅创建了另一个对这个对象的引用(地址)。 Par...

[学习笔记—Objective-C]《Objective-C 程序设计 第6版》第四章 数据类型和表达式

本章内容相对比较基础,容易理解。过于简单繁琐的内容在此不再赘述。这里只讲解本章的框架和比较重要的细节部分。 Part1. 数据类型和常量 基本数据类型 int: 值域和运行计算机的硬件设...

[学习笔记—Objective-C]《Objective-C 程序设计 第6版》第七章 类

本章的学习笔记以本书第六章的例题(两个分数的加法)为主线展开,逐步介绍重要的知识点。Part 1. 合成存取方法从Objective-C 2.0 开始,可自动生成设置方法和取值方法:通过属性。接口文件...

[学习笔记—Objective-C]《Objective-C 程序设计 第6版》第五章 循环结构 部分例题&课后题讲解

本章相对比较简单,知识点就不在赘述。主要就书中的例题和课后题进行说明。if 结构if 基本结构for ( int_expression; loop_condition; loop_expression...

[学习笔记—Objective-C]《Objective-C 程序设计 第6版》第八章 继承

在子类使用实例变量,必须先在接口部分声明,在实现部分声明的实例变量是私有的 ClassB继承ClassA,ClassC继承ClassB. ClassC能继承ClassB的所有方法和实例变量,同时也一次...

[学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十五章 数字 字符串和集合

Part 1. 数字对象 基本的数据类型不是对象,因此不能给他们发信息。但是有的时候需要将这些值作为对象使用:NSArry创建的数组存储的值必须是对象,因此数据类型无法直接存储到数组中,需要NSNum...

[学习笔记—Objective-C]《Objective-C 程序设计 第6版》第九章 多态,动态类型和动态绑定

Part 1. 多态:相同的名称,不同的类 多态:使不同的类共享相同方法名称的能力称为多态。(可以开发一组可以相应相同方法名的类) //两个分数 Fraction *f...

[学习笔记—Objective-C]《Objective-C 程序设计 第6版》第三章 类,对象和方法

本人于2015年6月10日开始自学ios开发。 此学习笔记是本人在学习《Objective-C 程序设计 第六版》的过程中,经本人修改,整理的内容。 略过第一,二章,从第三章有关类的概念开始。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十七章 内存管理和自动计数
举报原因:
原因补充:

(最多只允许输入30个字)