object-c的内存管理还真是个头痛的问题,看了蛮多的文章讨论,还是免不了犯错,最近小小的实验了一下,做个小记.
view的retiancount变化:alloc为1,被addSubview加1,removeFromSuperView减1,而controller有点不同在于它的view被addSubview,它本身并不会加一,比如:
lab=[[UILabel alloc] init];
[lab setFrame:CGRectMake(120, 100, 80, 20)];
NSLog(@"after alloc---%d",[lab retainCount]);
[self.view addSubview:lab];
NSLog(@"after addSubview---%d",[lab retainCount]);
[lab removeFromSuperview];
NSLog(@"after remove---%d",[lab retainCount]);
[lab release];
NSLog(@"after release---%d",[lab retainCount]);
控制台的输出:
2010-11-06 16:07:23.145 viewTest1[1430:207] after alloc,test count is 1
2010-11-06 16:07:23.147 viewTest1[1430:207] after alloc---1
2010-11-06 16:07:23.147 viewTest1[1430:207] after addSubview---2
2010-11-06 16:07:23.148 viewTest1[1430:207] after remove---1
2010-11-06 16:07:23.148 viewTest1[1430:207] after release---1
2010-11-06 16:07:23.149 viewTest1[1430:207] after addSubview,test count is 1
标记test的是controller,lab在这里是实例变量,用于测试dealloc,里面用了remove和release,使得lab在这里retainCount变为0,在alloc所在的函数里不显示为0,还是显示为1(奇怪...)
再加几个NSLog,得到
2010-11-06 16:40:23.482 viewTest1[1654:207] fisrt---0
2010-11-06 16:40:23.483 viewTest1[1654:207] after alloc---1
2010-11-06 16:40:23.484 viewTest1[1654:207] after addSubview---2
2010-11-06 16:40:23.484 viewTest1[1654:207] after remove---1
2010-11-06 16:40:23.485 viewTest1[1654:207] after release---1
刚开始显示0,因为lab是nil,[nilretainCount]输出为0.
在类的dealloc里面lab的retainCount已经为0,调用它的任何函数都会BAD_ACCESS,包括[lab retainCount]和[lab release],所以dealloc里实例变量release之后最好nil一下,因为对nil的任何操作都不会BAD_ACCESS,在dealloc里也就可以release了.
关键还是alloc和release的配对,对于不配对的情况赋值nil可以避免错误
似乎是挺简单的东西,但还是得注意,细节决定成败
PS:在mac下排版还真不方便将就将就吧..
分享到:
相关推荐
“以人为本”贯穿始终——唐钢炼铁厂南区安全管理小记.docx
【咬人草小记,阅读附答案】 咬人草小记阅读答案.docx
流程图与控制流图课堂小记.流程图与控制流图课堂小记.流程图与控制流图课堂小记.流程图与控制流图课堂小记.流程图与控制流图课堂小记.流程图与控制流图课堂小记.流程图与控制流图课堂小记.流程图与控制流图课堂小记....
TCP-IP小记
很全面的,很实用的,看完提高不少,不管新手老手,都绝对有用
随笔小记.doc
python进行爬虫小记,主要用于python快速入门理解。
c语言理论知识小记
环境: Linux s12084 2.6.9-67.ELsmp #1 SMP Wed ...小记一下。以备以后参考。 boost 库做得真好。在windows 平台, linux 平台下编译都很顺利。hp aCC 也宣称对 boost 1.35 完全支持 。 全部编译是很痛苦的过程
GeoStudio学习小记
海居小记
我做java web 多年的小记,希望能打大家有用
asp.net Jmail组件使用小记
redis安全学习小记1
NULL 博文链接:https://zfwdl2005.iteye.com/blog/1308748
本草缘·种植小记
vuex使用方法,小记总结
PHPweb渗透小记.docx
刘重威将军小记.docx
Sqlite数据库sqlite3命令小记