我想问一个关于iPhone的问题。我正在编写一个程序,可以将记录添加到iPhone内置联系人。但是,我不知道有多少用户可以存储在iPhone Contacts中。是否有一些限制(例如iPhone内置联系人仅支持2000记录)。联系人的大小?
此外,iPhone的大小(例如32GB,64GB)或其他元素是否会影响通讯录的大小?谢谢。
答案 0 :(得分:1)
联系人存储在手机上的一对SQLite数据库中,因此唯一的限制是SQLite强加的限制和设备的处理能力。
简短的回答是:你不可能遇到问题,除非你想要做一些非常大规模的事情,比如为~1.6M印度铁路员工写一个公司目录应用程序或捕获所有的〜 2亿美国登记选民。我创建了一个包含所有美国邮政编码的数据库,另一个包含来自标准Linux拼写词典的所有英语,德语,法语和西班牙语单词的多个映射,并且没有遇到任何问题。后者拥有超过300万条记录的表格,在原始iPhone上运行良好。
在绝对限制记录数之前,您更有可能遇到机器性能限制。例如,请从SQLite site:
中考虑这一点当您在SQLite中启动事务(在任何不在显式BEGIN ... COMMIT中的写操作之前自动发生)时,引擎必须在磁盘文件中分配脏页位图以帮助它管理其回滚日志。 SQLite每1MB数据库需要256个字节的RAM。对于较小的数据库,所需的内存量不是问题,但是当数据库开始增长到数千兆字节范围时,位图的大小可能会变得非常大。如果您需要存储和修改超过几十GB的数据,则应考虑使用其他数据库引擎。
所以,(如果我的数学是正确的)30G数据库在INSERT期间需要7.5M的空间用于位图。对于第一代iPhone来说这可能很难(仅有64M RAM和16G闪存),但在具有更多内存的后续型号上也许可以。也就是说,在你得到这么多记录之前,更新索引或要求AddressBook.app显示它们可能会导致无法接受的性能。
如果要浏览AddressBook架构,请在模拟器中创建单个联系人,然后在终端窗口中创建:
% cd "~/Library/Applications Support/iPhone Simulator/4.0.2/Library/AddressBook"
% sqlite AddressBook.sqlitedb
sqlite> .schema
然而,这是一个很好的例子,说明为什么必须在真实设备上测试您的应用,然后再将其提交到商店。这样的应用程序将在模拟器的3.0GHz,多核,4GB RAM环境中运行,但在1/2 GHz第二代iPod Touch上运行效果不佳。