做了一段時間的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];