1. 程式人生 > >iOS記憶體優化及排查方法

iOS記憶體優化及排查方法


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];                               ----------      正確