黑马程序员技术交流社区
标题:
内存释放的问题求助
[打印本页]
作者:
cnchenys
时间:
2014-3-31 09:40
标题:
内存释放的问题求助
本帖最后由 cnchenys 于 2014-3-31 15:27 编辑
C * c2 = [[C alloc]init];
c2.test1 = @"whatever";
NSLog(@"%@",c2.test1);
[c2 release];
NSLog(@"%lu",(unsigned long)c2.retainCount);
[c2 release];
NSLog(@"%@",c2.test1);
打印结果:
2014-03-30 15:29:36.936 MemoryTest[1529:707] whatever
2014-03-30 15:29:36.938 MemoryTest[1529:707] delloc C
2014-03-30 15:29:36.939 MemoryTest[1529:707] 1
2014-03-30 15:29:36.939 MemoryTest[1529:707] whatever
他为什么不报错啊,c2 不是释放了吗???而且已经调用dealloc方法了啊,已经销毁了啊???
作者:
脸皮猴
时间:
2014-3-31 11:31
1、你检查下你的dealloc重写方法里面super dealloc没有。
2、我刚刚测试了下,release以后这个内存不是马上就释放了,而是还需要时间的。你下面这两句
2014-03-30 15:29:36.939 MemoryTest[1529:707] 1
2014-03-30 15:29:36.939 MemoryTest[1529:707] whatever
能打印出来可能是内存还没真正的释放,你多打印几句这个 NSLog(@"%@",c2.test1);试一试就知道了,肯定报错。
作者:
cnchenys
时间:
2014-3-31 12:48
脸皮猴 发表于 2014-3-31 11:31
1、你检查下你的dealloc重写方法里面super dealloc没有。
2、我刚刚测试了下,release以后这个内存不是马 ...
猴哥威武
作者:
于清扬
时间:
2014-3-31 14:17
C * c2 = [[C alloc]init];
c2.test1 = @"whatever";
NSLog(@"%@",c2.test1);
[c2 release];
NSLog(@"%lu",(unsigned long)c2.retainCount);
[c2 release];
NSLog(@"%@",c2.test1);
从上面的代码看,存在内存管理的问题。
一个对象通过alloc 创建出来引用计数器是1,release一次计数器减1,
重写dealloc方法,调回super dealloc 。
上面代码第一次release后计算器是0,对象会被释放,在调用release会发生野指针错误,因为访问了一块已经被释放的空间。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2