Анкит,
Вот вам скин: используйте Core Data.
Вот длинная форма:
Несмотря на то, что вы можете использовать множество критериев для выбора между Базовыми данными, ORM (FMDB) или прямыми вызовами sqlite, реальная стоимость этого выбора зависит от вашего времени его использования, поддержки Apple и использования других проектов. (RESTKit, который отображает службы REST на Core Data, популярен в наши дни.)
Следовательно, большой процент времени, скажем, 90 +% (вымышленная статистика), ответ на iOS будет использовать Core Data. Зачем? Как только вы освоите его и создадите несколько маленьких вспомогательных методов, Core Data удерживает вас в согласованном вычислительном мире - графе объектов Objective-C. Core Data научит вас тому, как использовать динамический язык, который поможет каждому другому аспекту вашего программирования на iOS. Следовательно, вы более продуктивны. Не борись за рамки.
Если вы переносите большую и сложную базу данных и схему SQLite из другого приложения, тогда может быть экономически эффективным использование либо FMDB, либо SQLite. Но я сомневаюсь в этом. Написание простого приложения для командной строки на основе Mac для переноса БД в БД базовых данных является конечной и простой задачей. Вам почти гарантировано придется переписать большую часть бизнес-логики в Objective-C. (Да, C ++ и Objective-C ++ - хорошие технологии. Действительно ли ваша бизнес-логика базы данных была настроена для работы на устройстве с ограниченным объемом памяти? Я так не думал.)
Базовые данные получают высокую оценку производительности. Это действительно довольно быстро. Вы просто должны использовать его по-другому, чем вы используете БД. В частности, вы почти всегда извлекаете данные из хранилища, а затем уточняете их, используя предикаты непосредственно в различных наборах и массивах. На устройствах iOS, где флэш-память на удивление медленная, эта стратегия избыточного извлечения особенно эффективна. На самом деле у вас много оперативной памяти на этих устройствах, используйте ее для увеличения производительности. (Да, я знаю, что это явное противоречие моему вышеописанному стуку в переносимой бизнес-логике. Но на самом деле код, перенесенный из среды рабочего стола или сервера, имеет так много неявных предположений о скорости диска, объеме памяти и реальности виртуальная машина с резервным хранилищем, она просто не будет хорошо работать на устройстве с ограниченным объемом памяти, работающим от батареи, с модной моделью памяти. [Она также не будет работать очень хорошо на устройствах Android.]) Вы также денормализуете свои данные, чтобы упростить отображать его в различных виджетах интерфейса iOS и Mac OS X. Есть несколько приложений, в которых Core Data будет работать медленнее, чем эквивалентная БД SQLite. Это было подробно описано в другом месте. Одно из главных утверждений состоит в том, что задачи, в которых идентификаторы определяются исходными базами данных, соответствуют производительности Core Data. Но это может быть несколько смягчено разумной индексацией и перебором.
Следует помнить и о мобильных устройствах: размер базы данных, поскольку это мобильные устройства в Интернете, обычно скромный. Следовательно, производительность легче достичь. Многие уроки из мира серверов могут не относиться к этому мобильному миру с батарейным питанием.
Другими словами, вам пришлось пойти ва-банк, чтобы использовать Objective-C в iOS / Mac OS X, вы также получите некоторые важные преимущества в производительности благодаря использованию Core Data.
Andrew