佳为好友

原:内存泄露问题经验

创建:10-9-28

内存泄露问题:

*所有成员变量需要在程序中,多次赋值的,也就是说不仅仅是在初始化函数分配一次的,则一定要使用访问变量,否则容易引起内存的释放等问题.


*数组释放时异常,发现前几个元素都是0x0.注意,这个时候并不是因为数组因为有0x0的元素而导致的异常,而是因为在释放到0x0之后的元素时,发生了异常,很可能是外部将数组的元素释放了.至于有0x0的原因,是因为数组在依次释放,每次释放了一个元素之后,都会置为0x0.所以,显示0x0的元素,其实是正确释放了的元素.
修改方法是:查找数组的对象,是否正确释放了,有些时候,可能需要使用访问函数来进行成员变量的存储和释放,而不是直接操作成员变量.

*[alert show]会提示内存泄露.因为,alert不会在当前页面显示.它会被加入到系统的资源中,等待下次event到达之后,才会显示出来,因此,系统会在你show之后,自动retain它,然后在它显示之后,在release它.总而言之,你可以忽略它的泄露.
参见:http://stackoverflow.com/questions/2862335/uialertview-show-causing-a-memory-leak


*访问函数的内存泄露.如果某个变量有访问函数,则 在程序中someVar = xxx会导致内存泄露,而[someVar release],则会导致异常退出.
方法是:
1,先使用@pro  ,搜索所有的访问变量.然后全选,粘贴到某个文本文件中.
2,然后针对每个访问变量,搜索  [^.]sessionid[ ]*=  正则表达式来搜索所有someVar = xxx
3,然后针对每个访问变量,搜索 name[ ]*release 查看是否有除了在dealloc之外的删除,需要修正为self.xxx = nil;

































+++++

posted on 2012-12-25 09:55 佳为好友 阅读(271) 评论(0)  编辑 收藏 引用 所属分类: Debug-GDB


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2012年12月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

留言簿(1)

随笔分类

搜索

最新评论

评论排行榜