热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

iOS内存优化及排查方法

1.IBOutlet对象需要release2.不停的往UIView,特别是UIScrollView上add相同SubView。一定要记得清除之前的SubView&#x


1.IBOutlet 对象需要release

 

 


2.不停的往UIView,特别是UIScrollView上add相同SubView。一定要记得清除之前的SubView,并且在dealloc函数中执行该方法

for (UIView* sbViewin scrvBg.subviews

{

    [sbView removeFromSuperview];

}

这里还有个获得subView的小技巧:

[subView setTag:300];

subView = [self.viewviewWithTag:300]

 


3.dealloc不一定会被调用,所以可以自己手写一个myRelease方法,当退出该界面的时候手动调用release需要释放的对象,并且将其置为nil。

 


4.记住,如果你不太明白UIView的drawRect的调用时机,千万不要轻易往drawRect里写代码,特别是没有立即release的对象。很容易在这里因为多次调用了drawRect而没有release该对象导致内存溢出。

 


5.检查内存泄漏最好的工具是xCode,当然不是说xCode工具排查完了就OK了。我们发现xCode只能检查明显的代码级别泄漏,而像上面第四点因为多次调用某个函数却没有配对release的逻辑性泄漏是排查不出来的,只能通过代码阅读排查。

我这里能给出的经验就是,alloc的对象应该立即release。如果该对象不能立即release,必须保证alloc和release必须配对调用,特别要留意那些可以多次调用且包含alloc却未被及时release的函数。四个字概括“非常危险”!

 


6.属性对象不要用Self.来alloc它,例如:

self.my_arr =[[NSArray alloc]init];    ----------     错误!

 

NSArray *tmpArr = [[NSArray alloc]init];

self.my = tmpArr;

[tmpArr release];                               ----------      正确


推荐阅读
author-avatar
幸运大树来了
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有