黑马程序员技术交流社区
标题: 集合对象内存管理探究 [打印本页]
作者: muzipiao 时间: 2016-4-8 10:39
标题: 集合对象内存管理探究
在MRC下,NSArray,NSMutableArray快速创建对象时,例如:[NSArray array];
[NSArray arrayWithObject:id];
[NSArray arrayWithObjects:id1,id2,...,nil];
或其他方法快速创建对象时候(NSMutableArray类似),集合相当于加入了自动释放池
例如:NSArray *arr1 = [NSArray array];
NSArray *arr2 = [[[NSArray alloc] init] autorelease];
这两种方式是一样的,会自动加入自动释放池,不需要手动release
将其他对象加入到集合中,集合会在自动释放池结束的时候销毁,集合销毁时,会向集合中所有对象发送一次release
注意:如果这样写:NSArray *arr3=[[NSArray alloc]init],此时,arr3没有加入自动释放池,需要手动release,否则不会释放
可以利用分类Category重写NSArray的dealloc方法,观察NSArray/NSMutableArray销毁的条件
NSArray分类重写dealloc方法:
- #import "NSArray+myDealloc.h"
- @implementation NSArray (myDealloc)
- //利用分类重写dealloc方法
- -(void)dealloc{
- NSLog(@"NSArray 已经释放");
- [super dealloc];
- }
- @end
复制代码 主函数中,NSArray *arr= [NSArray array];快速创建对象,arr会在自动释放池结束时销毁 NSArray *arr= [[NSArray alloc]init];方法创建对象,arr在自动释放池结束后不会销毁
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |