黑马程序员——oc语言学习心得—— 手动管理内存
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流------
首先要手动管理内存 要手动改以下参数 将yes改为no
内存管理原则
(一)原则
只要还有人在使用某个对象,那么这个对象就不会被回收;
只要你想使用这个对象,那么就应该让这个对象的引用计数器+1;
当你不想使用这个对象时,应该让对象的引用计数器-1;
(二)谁创建,谁release
(1)如果你通过alloc,new,copy来创建了一个对象,那么你就必须调用release或者autorelease方法
(2)不是你创建的就不用你去负责
(三)谁retain,谁release
只要你调用了retain,无论这个对象时如何生成的,你都要调用release
(四)总结
有始有终,有加就应该有减。曾经让某个对象计数器加1,就应该让其在最后-1.
单个对象内存管理
在MRC模式下 对象引用计数为0就会被释放 retain加1 release减1 retaincount查看引用计数
要检测对象是否被释放 要重写dealloc方法 最后要调用[super dealloc];
- -(void)dealloc{
- NSLog(@"对象一挂掉,哈哈哈");
- [super dealloc];
- }
复制代码
如果引用计数为0在使用此对象对造成野指针访问
- Person *p=[[Person alloc]init];//1
-
- NSUInteger i= [p retainCount];//1
- NSLog(@"%lu",i);
- //错误 NSUInteger a=[p retain];
- //引用计数加1
- Person *p2=[p retain];//2
- NSUInteger a=[p2 retainCount];
- NSLog(@"\n%lu",a);
- //引用计数减1
- [p release];//1
- NSLog(@"retainCount=%lu",[p retainCount]);
- [p release];//0//此时引用计数为0 系统自动调用我们重写的dealloc方法
- //[p eat];//对象已挂 这是野指针访问 开启僵尸对象检测才会报错
- //NSLog(@"retainCount=%lu",[p retainCount]);//野指针访问 以为对象已死 值没有意义n
复制代码
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流------ |