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

 

轉: http://blog.csdn.net/h3c4lenovo/article/details/8998482


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM