我是做应用程序的iphone程序员,主做应用程序,偶尔客串个把cocos2d有戏,入行刚刚满一年,在这下半年,越来越发现程序测试到最后,一般会留 下两个问题:1、内存泄露 2、用户体验差 。 而后者,我在之前的文章中也曾经表态过我的态度,但是很多时候,这些受策划的影响会更大。往往,内存泄露才识最令人头疼的,最近在整理我所碰到的内存泄露 实例,希望给大家有所帮助,不断更新,有兴趣的朋友可以一起写,留言给我或者给我邮件都行,我会给你加上备注。
1、关于声明为 IBOutlet 的对象的释放
在 我们的应用程序中,使用InterfaceBuilder 可以帮助大家节省更多制作界面方面的时间。所以很多人习惯用IBOutlet。请记住,在iPhone,iPad程序中,所有的声明为IBOutlet的 对象都需要在最后的dealloc方法中进行 release。并且建议每一个声明为IBOutlet的对象都是用@property (nonamatic, retain)。
2、关于UIScrollView的特殊泄露
之前做图片查看模块的时候,频频会出现内存泄露问题,最终,查到的结果是,UIScrollView泄露。当我们在程序中使用了UIScrollView的时候,请在dealloc的时候,对scrollview及其subviews进行释放:
for (UIView *innerview in [scrollview subViews]){
[innerview removeFromSuperView];
}
[scrollview release];
scrollview = nil;
3、尽量少用autorelease对象,手动管理内存,虽然可能粗心等原因造成内存泄露,但是用instrument可以很容易检测出来,并且能解释释放内存。而使用autorelease对象时,在引入json、sqlite框架时,可能会有莫名其妙的找不到原因的内存泄露。
4、关于对象类型一致性的问题:需要从服务器获取数据的app,从服务器端返回的数据应当被认定为类型不可信(如:同过php脚本返回的json数据中的数字),由于服务器端程序语言可能是类型不严格的,导致在对返回数据做处理时对数据类型处理不严格。可能返回的数据类型并非客户端认为(或需求)的数据类型(如:php返回json含数字,可能被解析成NSNumber, NSString, NULL)。这时,需要做类型判断。