我正在开发一个使用 ARC 搜索 sqlite 数据库的应用程序。
我必须从数据库中检索数据到 NSMutableArray 以在 UISearchBar 的 textDidChange 事件时显示检索到的数据。
当 UISearchBar 的 textDidChange 时,它有很多从数据库中检索的数据。
从数据库中检索到大量数据后,我总是使用以下代码从 NSMutableArray 中清除。
[self.myArrayData removeAllObjects];
但是我从 NSMutableArray 中删除了所有数据,内存分配仍在发生。 没有减少。
下次当我在 UISearchBar 中键入内容时,内存分配仍在增加。 在我输入 10 次或以上后,我收到来自 XCodes 的内存警告和内存不足。
我想知道为什么当我调用 removeAllObjects 方法时,来自 NSMutableArray 的数据不清晰。 我正在使用 ARC 开发我的应用程序。 请帮助我。
最佳答案
你在这里没有很多信息,但它可能不是 NSMutableArray 保存数据。 SQLite 还保留最近检索记录的缓存。您可以在打开数据库后执行此操作来减少/删除 SQLCache。将缓存大小设置为您希望 SQLite 缓存的页数。默认值为 2000。每页大小为 1024 字节。
const char *pragmaSql = "PRAGMA cache_size = 0";
if (sqlite3_exec(database, pragmaSql, NULL, NULL, NULL) != SQLITE_OK) {
NSAssert1(0, @"Error: failed to execute pragma statement with message '%s'.", sqlite3_errmsg(database));
}
编辑:从技术上讲,您不能将缓存减少到 10 以下。如果您尝试,程序只会将缓存设置为 10。
关于objective-c - 为什么我不能在 iOS 中删除 NSMutableArray 的所有对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10320039/