gpt4 book ai didi

objective-c - 自定义 iOS 通讯录。需要有关数据结构和性能的建议

转载 作者:行者123 更新时间:2023-11-29 04:32:11 30 4
gpt4 key购买 nike

我目前正在开发一个 VoIP 应用程序,但我真的很受地址簿困扰。

由于自定义设计, native 地址簿不适合我的应用程序。此外,我想添加一些 native 地址簿中不存在的额外数据。但这会导致一些问题,我将其分为两部分:

<强>1。数据结构:

在我的应用程序的一部分中,我需要向用户显示他的所有地址簿联系人以及附加信息(例如,如果用户有相同的应用程序并且它处于在线状态)。

现在,我从地址簿 api 获取所有信息,并将其直接加载到数组中(由 tableView:cellForRowAtIndexPath: 访问),但不显示我的自定义信息正在谈论。我不知道是否值得将所有地址簿信息存储在 sqlite 数据库中(我可以轻松添加额外信息),或者是否应该仅将额外信息存储在文件或其他内容中。

将其存储在数据库中的最大问题是联系人的图片太重,以至于浪费内存数据库。我想只存储一个引用(ABRecordID),然后从地址簿而不是数据库收集相关信息,但是地址簿 api 的 Apple 文档说 ABRecordID 不保证保持不变,因此可能会导致我的数据出现在错误的联系人数据旁边。

有什么想法吗?

<强>2。性能:

这个自定义地址簿的第二个大问题是...例如,与 Android 相比,iOS 表格 View 过于“手动”。您需要将数据存储在某处,以便在调用 tableView:cellForRowAtIndexPath: 方法时返回该数据。您还可以在此方法中加载该数据,但这会导致速度非常慢。

这里的问题是,将所有数据预加载到内存中是危险的,因为一个人可能有 40 个联系人或 2000 个联系人(并且可能他/她已经为每个人拍了一张照片,这会更消耗内存) 。如果 iOS 设备内存不足,系统将终止该应用程序。数据库方法没有内存问题,但对每个出现的单元格进行查询的速度太慢,以至于无法接受。

同样,我需要这方面的想法。无法在性能和内存消耗之间找到权衡。

请不要索要代码,因为我不被允许发布它。我真的很感激你的建议。预先感谢您!

最佳答案

  1. 数据结构:除了记录引用之外,您还应该存储姓名、电话号码和电子邮件地址。您的数据存储中没有其他内容。如果三个值之一发生变化而另外两个保持不变,则更新更改后的值。在恢复许多用户的设备期间,记录引用可以同时更改,但名称电子邮件和电话不会。如果用户更改姓名、电子邮件或电话,他们将同时在许多用户中进行更改。有时,您会得到与电子邮件和电话不匹配的记录引用,例如,联系人可能已经更换了雇主,因此会显示密切匹配的列表并要求用户选择一个。

对于有数千次联系的人,我会使用寻呼。一次将 100 或 200 个加载到数组中,当前行显示在 TableView 中作为数组索引的中间。一旦用户滚动 20-30 条记录,就会更新地址簿中数组中的记录。您将花费大量时间重新保存数据,只是为了对集合进行比较并尝试使其保持最新。只要不将用户图像保留在内存中,您应该能够存储相当多的记录,因为您应该让 TableView 处理它。当您收到有关单元格即将变得可见的通知时,获取图像并分配给单元格。即使如此,我也会在加载图像之前稍等片刻,因为如果用户快速滚动,单元格就会飞过,您会收到单元格滚动出的通知,并且您可以释放图像数据。如果用户缓慢滚动,那么短暂的等待/ sleep 将会过去,每个单元格都应该显示图像。

我不知道您计划在包装联系人的应用程序中存储多少元数据,但如果您应该为联系人对象创建两个表,一个具有 3-4 个索引列,可以实现更快的查询,第二个表可以保留仅当用户在详细 View 中查看联系人时加载的其余部分。除非你在 iPad 上,否则不能在 tableviescell 中投入太多内容。

希望有帮助。

关于objective-c - 自定义 iOS 通讯录。需要有关数据结构和性能的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11578866/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com