天天看点

检查内存技巧

做了一段时间的iphone应用,感触最深的就是对内存问题的处理,这个问题几乎一直是自己在工作中必须要解决的,而最近这些日子则更是选入了内存的迷局之中。而我需要做的就是扒开云雾见天日。

    当然内存问题的产生原因是多样的,同时也是我们必须在遇到了某种问题之后,才知道该怎样去处理的,但是,曾经的经验和他人的分享却总是会对我们处理一些问题减少很多的工作量。而今天我想分享的就是一些关于iphone应用程序中遇到的一些内存处理的方法。

    首先,单个应用测试没有报内存问题,并不表示在集合中就不会存在内存问题。而且对iphone的内存问题最麻烦的也就在这里,很多单个发布的应用程序,在 被整合成为集合之后,内存问题就可能变得极其严重,而且随着集合中加入的新项目的不断增加,内存问题的严重性也迅速增加。所以,这里需要保证的一点就是我 们在做单个iphone程序时,应尽量做到:(1)分配和释放一定要对应,比如alloc,retain,copy一定要与release或者 autoRelease相对应。这是减少内存问题的很基础的一步,特别是对那些用有alloc功能的函数分配了内存,并做为了return的直的变量,我 们也应尽量将其用autoRelease或者其他可行的方式来释放。保证了这一点,整合时,就要轻松的多。(2)对于那些在代码中设置的delegate 一定要将其置空。(3)对于NSTimer对象一定要记得关掉,而且最好是采用条件式置空。如图中代码,对timer1先判断其是否可用在决定是否将其置 空。(4)对于那些定义的消息中心的数据也要记得进行移除操作。

检查内存技巧

图  1

    接下来,最好采用Build and Analyze方式对其进行内存分析,把出现的内存分析中的内存警告也尽可能地解决掉。当然还应当尽可能处理掉所有的编译警告。

    这之后,就是在整合的项目中进行处理了,在这里我们最好已开始就做好如下两部操作。

- (void)didReceiveMemoryWarning {

    // Releases the view if it doesn't have a superview.

    NSLog(@"didReceiveMemoryWarning = %@",[[self class] description]);

    [super didReceiveMemoryWarning];

    ......

    // Release any cached data, p_w_picpaths, etc. that aren't in use.

}

- (void)dealloc {

    NSLog(@"dealloc = %@",[[self class] description]);

    [super dealloc];

继续阅读