我正在清理电话簿iPhone应用程序中的代码,仪器中的泄漏工具报告说我正在泄漏nscfstring对象。以下是我所遵循的模式:
我的应用程序中有一个Person类,它只包含本地nsstring成员以及名、姓等的关联属性。
我的视图控制器有一个nsmutableArray属性,该属性由SearchBarSearchButtonClicked事件中的sqlite数据库填充。此nsmutableArray由将用于填充我的TableView控件的Person对象填充。此外,如果用户单击视图中的某个人,则其个人对象将传递到详细信息视图,以查看除名称之外的其他信息。
当我执行第一次查找并显示结果时,没有内存泄漏。
现在,当我执行第二次查找时,理想情况下我希望清除NSmutableArray并用新的结果集重新加载它,而不泄漏内存。为此,我在PersonalList属性上调用removeAllObjects,然后调用数据库重新填充PersonalList nsmutableArray,如下所示:
[self.personList removeAllObjects];
self.personList = [SearchService GetPersonList:searchText];
[list reloadData];
通过调用removeallobject,我已经消除了以前与Person对象相关联的泄漏。但是,现在看来我正在泄漏从个人对象的属性中遗留下来的nsstring对象。
这有可能吗?
我对Instruments工具不熟悉,但从钻取NCSFstring泄漏的扩展细节可以看出,堆栈中的最后一行代码通常指向属性的@Synthesis代码行,例如:
@synthesize firstName;
所以,这就是为什么我认为这些nsstring没有得到清理。有没有更好的方法可以做到这一点而不产生内存泄漏?