我正在清理我的電話簿iPhone應用程序中的代碼和儀器中的泄漏工具報告,我泄漏NSCFString對象。下面是我下面的模式:Objective C NSCFString泄漏與NSMutableArrays
我在我的應用程序中的Person類有什麼比當地的NSString成員和名字關聯的屬性更多,姓氏等
我的看法控制器有一個從searchBarSearchButtonClicked事件中的SQLite數據庫填充的NSMutableArray屬性。這個NSMutableArray填充了將用於填充我的tableview控件的Person對象。另外,如果用戶點擊視圖中的某個人,他們的Person對象將被傳遞給Detail視圖,以查看其他信息而不僅僅是名稱。
當我執行第一次查找並顯示結果時,沒有內存泄漏。
現在,當我執行第二次查找時,我希望清除NSMutableArray並重新裝入新的結果集而不會泄漏內存。因此,要做到這一點,我呼籲我的personList財產removeAllObjects,然後調用數據庫重新填充personList NSMutableArray中,如下圖所示:
[self.personList removeAllObjects];
self.personList = [SearchService GetPersonList:searchText];
[list reloadData];
通過調用removeAllObject我已經擺脫了,我曾經有過泄漏與Person對象關聯。但是,現在我正在泄漏單個Person對象的屬性中剩餘的NSString對象。
這可能嗎?
我是儀器工具的新手,但從擴展細節中可以看出,當我鑽入NCSFString泄漏之一時,堆棧中的最後一行代碼常常指向@synthesize代碼行財產,如:
@synthesize firstName;
所以,這就是爲什麼我認爲這些NSStrings沒有得到清理。有沒有更好的方式來做到這一點,不會產生內存泄漏?
如果您可以發佈您的Person類的代碼,可能更容易診斷正在發生的事情。 – Mark 2009-08-26 15:25:07