我目前正在开发一个 voIP 应用程序,我真的被地址簿困住了。
由于自定义设计,本机通讯录不适合我的应用程序。此外,我想添加一些本机通讯录中不存在的额外数据。但这会导致一些问题,我将其分为两个部分:
1.数据结构:
在我的应用程序的一部分中,我需要向用户显示他的所有通讯录联系人以及其他信息(例如,如果用户拥有相同的应用程序并且它在线)。
现在,我正在从 Address Book api 获取所有信息并将其直接加载到一个数组中(由 访问tableView:cellForRowAtIndexPath:
),但不显示我正在谈论的自定义信息。我不知道是否值得将所有通讯簿信息存储在 sqlite 数据库中(我可以轻松地添加额外信息),或者我是否应该只将这些额外信息存储在文件或其他东西中。
将其存储在数据库中的最大问题是联系人的图片很重,以至于导致浪费内存的数据库。我想只存储一个参考(ABRecordID
),然后从地址簿而不是数据库中收集相关信息,但是地址簿 api 的 Apple 文档说ABRecordID
不能保证保持不变,所以它可能导致我的数据出现在错误的联系人数据旁边。
任何的想法?
2、性能:
这个自定义地址簿的第二个大问题是……例如,与 Android 相比,iOS 表格视图过于“手动”。您需要将数据存储在某处,以便在tableView:cellForRowAtIndexPath:
调用该方法时返回该数据。您也可以在此方法中加载该数据,但这会使其非常慢。
这里的问题是,将所有数据预加载到内存中是危险的,因为一个人可能有 40 个联系人或 2000 个(可能他/她已经为每个人拍照,这将更加消耗内存)。如果 iOS 设备内存不足,系统将终止该应用程序。数据库方法没有内存问题,但是对每个出现的单元格进行查询非常慢,以至于无法接受。
同样,我需要为此提供一些想法。找不到性能和内存消耗之间的权衡。
请不要要求代码,因为我不允许发布它。我非常感谢您的建议。先感谢您!