【发布时间】:2025-12-25 09:15:11
【问题描述】:
我正在清理电话簿 iPhone 应用程序中的代码,而 Instruments 中的泄漏工具报告我正在泄漏 NSCFString 对象。这是我遵循的模式:
我的应用程序中有一个 Person 类,它只有本地 NSString 成员和名字、姓氏等的关联属性。
我的视图控制器有一个 NSMutableArray 属性,该属性是在 searchBarSearchButtonClicked 事件中从 SQLite 数据库填充的。这个 NSMutableArray 填充了将用于填充我的 tableview 控件的 Person 对象。此外,如果用户单击视图中的某个人,他们的 Person 对象将被传递到 Detail 视图,以查看除姓名之外的其他信息。
当我执行第一次查找并显示结果时,没有内存泄漏。
现在,当我执行第二次查找时,理想情况下,我希望清除 NSMutableArray 并使用新结果集重新加载它,而不会泄漏内存。因此,为此,我在 personList 属性上调用 removeAllObjects,然后调用数据库重新填充 personList NSMutableArray,如下所示:
[self.personList removeAllObjects];
self.personList = [SearchService GetPersonList:searchText];
[list reloadData];
通过调用 removeAllObject 我已经摆脱了与 Person 对象相关联的泄漏。但是,我现在似乎正在泄漏从各个 Person 对象的属性中遗留下来的 NSString 对象。
这可能吗?
我是 Instruments 工具的新手,但是当我深入了解其中一个 NCSFString 泄漏时,从扩展详细信息可以看出,堆栈中的最后一行代码通常指向 @synthesize 代码行属性,例如:
@synthesize firstName;
所以,这就是为什么我认为那些 NSStrings 没有得到清理。有没有更好的方法来做到这一点,不会产生内存泄漏?
【问题讨论】:
-
如果您可以发布 Person 类的代码,则可能更容易诊断出发生了什么。
标签: iphone objective-c xcode memory-leaks instruments