objective-c - 为什么我不能在 iOS 中删除 NSMutableArray 的所有对象?

标签 objective-c ios cocoa

我正在开发一个使用 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/

相关文章:

javascript - 是否可以在 Objective-C (iphone) 中使用 JavaScript?

ios - 应用内购买在发布近一周后仍无法正常工作

objective-c - 数据上传期间在 UITableView 上的 UIProgressView+Activity Indicator View

ios - UIPageViewController页面切换时避免iOS状态栏抖动

iphone - 在 ARC 模式下初始化变量

objective-c - 如何通过 KVC 设置 NSComboBox 的值?

objective-c - 隐藏 UIImagePickerControllerSourceTypceCamera 工具栏,但特定按钮?

objective-c - 处理和报告由于 Objective-C 中的整数溢出导致的内存分配错误的最佳方法?

ios - iOS,先强制退出应用程序,点击接收通知横幅后,应用程序启动失败

iphone - 最佳实践 - 访问全局偏好