[学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十七章 内存管理和自动计数
来源:互联网 发布:edm邮件制作软件 编辑:程序博客网 时间:2024/04/24 08:22
本书第十六章讲解的时关于文件和目录的操作,内容相对简单,再次略过。
第十七章的学习笔记经本人归纳整理呈献给大家。
内存管理:
- 为了被占用的内存能够再次利用,通过内存管理清理不用的内存。如果一个对象不再使用,就需要释放对象占用的内存
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;
0 0
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十七章 内存管理和自动计数
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之17-内存管理和自动引用计数——黑马 IOS 技术博客
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第四章 数据类型和表达式
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十章 变量和数据类型
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十一章 分类和协议
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第九章 内存管理
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第六章 选择结构
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第七章 类
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第八章 继承
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十二章 预处理程序
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十八章 复制对象
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第三章 类,对象和方法
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第四章 数据类型和表达式 课后练习题 4-10
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第九章 多态,动态类型和动态绑定
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十五章 数字 字符串和集合
- 【Objective-C学习笔记】内存管理——ARC自动引用计数
- 《Objective-C高级编程 iOS与OS X多线程和内存管理》学习笔记——第一章自动引用计数
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》开始
- IP首部校验和(ICMP报文的校验和)的计算方法
- 密码行业标准目录
- 神经网络特征可视化
- leetoj two sum
- Shark 0.9.1安装遇到的问题及解决办法
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十七章 内存管理和自动计数
- 不借助第3个变量交换a和b的值(c语言)
- tableView自定义cell
- Hello World
- 写给计算机的大学生!
- UILabel使用的小技巧
- 学习WinInet
- JVM Internals jvm内部机制
- java处理zip压缩文件