我目前正在开发一个voIP应用程序,而且我真的被地址簿卡住了。自定义iOS地址簿。需要关于数据结构和性能的建议
由于定制设计,原生地址簿不适合我的应用程序。此外,我想添加一些额外的数据不在本地通讯录中。但是,这是导致进我已经分成两个部分的一些问题:
1.数据结构:
在我的应用程序的一部分,我需要展现给用户提供所有他的地址簿中的联系人附加信息(例如,如果用户具有相同的应用并且它在线)。
现在我从地址簿api中获取所有信息并直接将其加载到一个数组中(但可通过tableView:cellForRowAtIndexPath:
访问),但不显示我正在讨论的自定义信息。我不知道是否值得将所有地址簿信息存储在sqlite数据库中(我可以轻松地添加额外的信息),还是只在文件或其他东西中存储额外的信息。
将数据存储在数据库中的最大问题是联系人的图片足够大以致于无法获得浪费的内存数据库。我以为只存储一个引用(ABRecordID
),然后从通讯簿而不是数据库收集相关信息,但Address Book api的Apple文档说ABRecordID
不保证保持不变,所以它可能会导致我的数据显示在错误的联系人数据旁边。
有什么想法?
2.性能:
第二个大问题,这个自定义地址簿是... iOS的意见表太“手动”相比Android的那些,例如。您需要将数据存储在某个地方,以便在调用tableView:cellForRowAtIndexPath:
方法时返回该数据。你也可以在这个方法中加载这些数据,但这会让它非常慢。
这里的问题是,预先加载内存中的所有数据是很危险的,因为一个人可能有40个联系人或2000个(也可能他/她为他们每个人拍了一张照片,这会消耗更多的内存)。如果iOS设备的内存不足,系统将终止该应用程序。数据库方法没有内存问题,但是要查询每个单元出现的过程非常缓慢,以至于无法接受。
再次,我需要这个想法。无法找到性能和内存消耗之间的折衷。
请不要要求代码,因为我不允许发布它。我真的很感激你的建议。先谢谢你!
您的问题的答案是用SQL支持的Core Data(不是二进制不是XML)。它专为这种类型的应用而设计。 – 2012-07-20 13:01:59
^这。另外,有一个'didReceiveMemoryWarning'方法,UIViewController调用来通知你即将耗尽内存。如果您接近崩溃,请将该方法中的调用放在一些数据中。 – Dustin 2012-07-20 13:31:34
谢谢你们两位! David H,你能告诉我sqlite和Core Data之间的区别吗?因为你说它是专门为这种类型的应用程序设计的? – 2012-07-23 06:11:40