原:内存泄露问题经验

原:内存泄露问题经验

创建: 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;

































+++++

你可能感兴趣的:(原:内存泄露问题经验)