我目前正在開發一個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