面试题-内存管理(MRC)
来源:互联网 发布:linux怎么复制文件命令 编辑:程序博客网 时间:2024/05/22 14:00
1.什么是自动应用计数
- 自动引用计数(ARC,Automatic Reference Counting)是指内存管理中对引用采取自动计数的计数。
- 在Objective-C中采用ARC机制,让编译器来进行内存管理。
2.采用ARC的好处
- 在代码中无需手动键入retain或者release代码,减少了开发程序的工作量。
- 降低程序崩溃、内存泄漏的风险。
- 编译器完全清除目标对象,并能立刻释放不再被使用的对象。
- 应用程序具有可预测性,流畅运行,速度大幅提升。
3.使用ARC的前提
- 使用Xcode4.2或以上版本。
- 使用LLVM编译器3.0或以上版本。
- 编译器选项中设置ARC为有效。
4.内存管理的思考方式
自己生成的对象,自己所持有。
使用以下名称开头的方法意味着自己生成的对象只有自己持有: alloc new copy mutableCopy
// 自己生成并持有对象id obj = [[NSObject alloc] init];// 自己持有对象
非自己生成的对象,自己也能持有。
用alloc/new/copy/mutableCopy以外的方法取得的对象,因为非自己生成并持有,所以自己不是该对象的持有者。使用retain方法可以持有对象。
// 取得非自己生成并持有的对象id obj = [NSMutableArray array];// 取得的对象存在,但自己不持有对象[obj retain];// 自己持有对象
通过retain方法,非自己生成的对象跟用alloc/new/copy/mutableCopy方法生成并持有的对象一样,成为自己所持有的。
不再需要自己持有的对象时释放。
自己持有的对象,一旦不需要,持有者有义务释放该对象。释放采用release方法。
// 自己生成并持有对象id obj = [NSObject alloc] init];// 自己持有对象[obj release];// 释放对象。指向对象的指针仍然保存在变量obj中,但对象一经释放绝对不可访问。
非自己持有的对象无法释放。
对于用alloc/new/copy/mutableCoy方法生成并持有的对象,或是用retain方法持有的对象,由于持有者是自己,所以在不需要改对象时需要将其释放。而由此以外所得到的对象绝对不能释放。如果在应用程序中释放了非自己所持有的对象就会造成崩溃。例如自己生成并持有对象后,在释放完不再需要对象之后再次释放。或者在取得的对象存在,但自己不持有对象时释放。
5. copy与mutableCopy的区别
- copy方法遵守NSCopying方法约定,由各类实现的copyWithZone:方法生成并持有对象的副本。
- mutableCopy方法遵守NSMutableCopying协议,由各类实现的mutableCoyWithZone:方法生成并持有对象的副本。
- copy方法生成不可变更的对象,而mutableCopy方法生成可变更的对象。
- 用这些方法生成的对象,虽然是对象的副本,但同alloc、new方法一样,自己生成并持有对象。
6. 操作和方法的对应关系
7. autorelease
- autorelease是自动释放,类似于C语言中的自动变量(局部变量)的特性。
- 当对象实例超出其作用域时,对象实例的release实例方法被调用。
- 同C语言的自动变量不同的是,编程人员可以设定变量的作用域。
具体使用:
NSAutoreleasePool *pool = [NSAutoreleasePool alloc] init];id obj = [[NSObject alloc] init];[obj autotelease];[pool drain]; //等同于[obj release]
8. autorelease NSAutoreleasePool对象会如何?
发生异常。 通常在使用Objective-C,也就是Foundation框架时,无论调用哪一个对象的autorelease实例方法,实现上调用的事NSObject类的autorelease实例方法。但是对于NSAutoreleasePool类,autorelease实例方法已被该类重载,因此运行时会出错。
0 0
- 面试题-内存管理(MRC)
- 内存管理面试题
- 内存管理面试题
- Linux C面试题(内存管理)
- Linux C面试题(内存管理)
- Linux C面试题(内存管理)
- Linux C面试题(内存管理)
- iOS面试题(3)----内存管理
- 面试题-内存管理(ARC)
- OC通讯录(MRC手动管理内存)
- MRC内存管理(二)数组、控件
- 内存管理arc,mrc
- MRC内存管理1
- 内存管理- MRC
- 内存管理 ARC + MRC
- MRC内存管理
- 操作系统--面试题/内存管理
- 内存管理与ARC、MRC
- 连接redis异常记录
- 第二个JAVA程序:在屏幕上打印*
- 第五周项目四 数制转换
- 移动端字体viewPort
- 第五周项目五 后缀表达式
- 面试题-内存管理(MRC)
- 如何安装composer
- 轻量级分布式 RPC 框架(续)
- web前端面试题(HTML&CSS)上 答案详解
- C/C++中strcpy和strncpy的区别
- in 和 exist 区别
- VS2010附加目录宏
- 电路板绘制经验积累
- 关于c#文件操作Streamwriter,streamreader的使用