读书笔记:Objective-C高级编程 iOS与OS X多线程和内存管理 ——(持续)
来源:互联网 发布:华住酒店员工流失数据 编辑:程序博客网 时间:2024/05/16 10:45
1.内存管理的思考方式:
- .自己生成的对象,自己所持有
- .非自己生成的对象,自己也能持有
- 不再需要自己持有的对象时释放
- 非自己持有的对象无法释放
由NSObject类担任下面管理职责
eg:
/* * 取得的对象存在,但是自己不持有 */ id obj = [NSMutableArray array]; /* * 自己持有对象 */ [obj retain];
2.autrelease
autorelease对待实例相当于c语言里面的局部变量,出了区域就被废弃(如果对自动释放池进行自动释放,那么会出现异常—>理由:无论调用哪一个对象的autorelease实例方法,实际上是调用NSObject类的autorelease实例方法,但是对于NSAutorelease类,autorelease实例方法已被该类重载,因此运行时会出错)
使用方法:
- 生成并持有NSAutoreleasePool对象
- 调用已经分配对象的autorelease
- 废弃NSAutoreleasePool对象
autrelease生命周期
- 自己设定的释放池的生命周期:,超出其作用域就会自动废弃(某一段程序大量生成autorelease对象使用)
- 系统的释放池:程序主循环的NSRunLoop或者其他程序可以运行的地方,对释放池对象进行生成,持有和废弃,(程序关闭)
3.ARC下的四种修饰符
1.__strong、__weak、__unsafe_unretained、__autoreleasing
__strong修饰符是id类型和对象类型默认的所有权修饰符,
__strong、__weak、__autoreleasing修饰符所修饰的自动变量初始化为nil,即:
id __strong obj0; id __weak obj1; id __autoreleasing obj2; // 等同于下面代码 id __strong obj0 = nil; id __weak obj1 = nil; id __autoreleasing obj2 = nil;
// 1.__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。
2.__weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型(int)。
3.__block对象可以在block中被重新赋值,__weak不可以。
3.__block对象可以在block中被重新赋值,__weak不可以。
PS:__unsafe_unretained修饰符可以被视为iOS SDK 4.3以前版本的__weak的替代品,不过不会被自动置空为nil。所以尽可能不要使用这个修饰符。
0 0
- 读书笔记:Objective-C高级编程 iOS与OS X多线程和内存管理 ——(持续)
- Objective-C高级编程 iOS与OS X多线程和内存管理 读书笔记(一)
- 内存管理原理----《Objective-C高级编程:iOS与OS X多线程和内存管理》读书笔记
- 《Objective-C高级编程:iOS与OS X多线程和内存管理》读书笔记
- Objective-C高级编程:iOS与OS X多线程和内存管理读书笔记
- 《Objective-C高级编程 iOS与OS X多线程和内存管理》学习笔记——第一章自动引用计数
- 《Objective-C高级编程 iOS与OS X多线程和内存管理》学习笔记——第二章Blocks
- Objective-C 高级编程:iOS与OS X多线程和内存管理
- Objective-C 高级编程:iOS与OS X多线程和内存管理
- 【Objective-C高级编程】iOS与OS X多线程和内存管理
- 【Objective-C高级编程】iOS与OS X多线程和内存管理(二)
- 【Objective-C高级编程】iOS与OS X多线程和内存管理(三) Block语法
- 【Objective-C高级编程】iOS与OS X多线程和内存管理(四) Block的实现
- 【Objective-C高级编程】iOS与OS X多线程和内存管理(六) __block 说明符
- 【Objective-C高级编程】iOS与OS X多线程和内存管理(九) Block 循环引用
- 《Objective-C 高级编程 iOS与OS X多线程和内存管理》 核心札记一
- 《Objective-C 高级编程 iOS与OS X多线程和内存管理》 核心札记二
- 《Objective-C 高级编程 iOS与OS X多线程和内存管理》 核心札记三
- poj 1274 The Perfact Stall
- Qt学习之路之启动浏览器
- 获取电话联系
- hdu 1532(poj 1273) Drainage Ditches (网络流·最大流)
- 国外程序员整理的 C++ 资源大全
- 读书笔记:Objective-C高级编程 iOS与OS X多线程和内存管理 ——(持续)
- 可视化Java垃圾回收
- 多态之父子争权
- The die is cast
- 几款开源的图形界面库(GUI Libraries)
- C++ Primer 5e chapter 10.2
- JAVA UDP聊天室
- 共享内存区
- 深入理解JavaScript系列(2):揭秘命名函数表达式