试题详情
- 简答题内存管理 Autorelease、retain、copy、assign的set方法和含义?
-
1).你初始化(alloc/init)的对象,你需要释放(release)它。例如: NSMutableArray aArray = [[NSArray alloc] init]; 后,需要 [aArray release];
2).你retain或copy的,你需要释放它。例如: [aArray retain] 后,需要 [aArray release];
3).被传递(assign)的对象,你需要斟酌的retain和release。例如:obj2 = [[obj1 someMethod] autorelease];
对象2接收对象1的一个自动释放的值,或传递一个基本数据类型(NSInteger,NSString)时:你或希望将对象2进行retain,以防止它在被使用之前就被自动释放掉。但是在retain后,一定要在适当的时候进行释放。
关于索引计数(Reference Counting)的问题 retain值 = 索引计数(Reference Counting)
NSArray对象会retain(retain值加一)任何数组中的对象。当NSArray被卸载(dealloc)的时候,所有数组中的对象会 被 执行一次释放(retain值减一)。不仅仅是NSArray,任何收集类(Collection Classes)都执行类似操作。例如 NSDictionary,甚至UINavigationController。
Alloc/init建立的对象,索引计数为1。无需将其再次retain。
[NSArray array]和[NSDate date]等“方法”建立一个索引计数为1的对象,但是也是一个自动释放对象。所以是本地临时对象,那么无所谓了。如果是打算在全Class中使用的变量(iVar),则必须retain它。
缺省的类方法返回值都被执行了“自动释放”方法。(*如上中的NSArray)
在类中的卸载方法“dealloc”中,release所有未被平衡的NS对象。(*所有未被autorelease,而retain值为1的) 关注下方微信公众号,在线模考后查看
热门试题
- 什么是NSManagedobjectCo
- 简述http和scoket通信的区别。
- 写一个setter方法用于完成@prop
- #import跟#include 又什么
- 简述Objective-C的优缺点。
- 简述视图控件器的生命周期。
- 内存管理的几条原则时什么?按照默认法则.
- 一个tableView是否可以关联两个不
- 如何对iOS设备进行性能测试?
- 如果我们不创建内存池,是否有内存池提供给
- 谈谈Object-C的内存管理方式及过程
- bjective-C如何对内存管理的,说
- oc中的协议和java中的接口概念有何不
- 什么时候需要在程序中创建内存池?
- 关键字volatile有什么含意?并给出
- 多线程是什么?
- 类别和类扩展的区别。
- 什么是简便构造方法?
- 你了解svn,cvs等版本控制工具么?
- 简述浅复制和深复制的区别?