Я оптимизирую свое первое приложение для iOS, прежде чем оно попадет в магазин, и отметив методы, которые занимают, казалось бы, большее количество времени. У меня есть довольно простое приложение с основными деталями, в котором объекты из SQLite Core Data показаны в UITableView
, а затем нажатие на один приводит к подробному представлению, в котором пользователь может пометить его как любимый (установив флаг BOOL
в этом объекте на YES
. Как только они попали их любимую кнопку, я называю [NSManagedObjectContext save]
, чтобы гарантировать, что их изменения отражаются немедленно, а в случае незапланированного прекратить и т.д.Производительность метода NSManagedObjectContext
Это save
операция в настоящее время принимает вокруг 205ms при тестировании на моем iPhone 4S. Там составляют около 4500 записей в базе данных, каждая из которых содержит несколько строк и несколько булевых значений (завернутые в NSNumber
с).
Первый вопрос: , если это потребуется? Я устанавливаю только одно логическое значение, а затем сохраняю контекст, но я никогда не использовал Core Data, поэтому не знаю, нормально ли это.
Второй вопрос: код, который я использую, ниже - я делаю что-то не так в коде, чтобы сделать этот метод длинным для выполнения?
- (IBAction) makeFavorite: (id) sender
{
[self.delegate detailViewControllerDidMakeFavorite];
[_selectedLine setIsLiked: [NSNumber numberWithBool: YES]];
[_selectedLine setIsDisliked: [NSNumber numberWithBool: NO]];
NSError *error;
if (![[[CDManager sharedManager] managedObjectContext] save:&error]) NSLog(@"Saving changes failed: %@, %@", error, [error userInfo]);
}
Может быть, я тревожиться по пустякам (я все еще относительно новый программист), но на более широкой ноте, 200мс достаточно для меня, по крайней мере, попытаться решить этот вопрос, не так ли? :)
Я искал учебники по этому предмету, но в принципе ничего не нашел, кажется, что он в первую очередь предназначен для iCloud, который я не использую. Похоже, что это для создания документа, но я просто вытаскиваю единый объект из базы данных SQL Data Core, у меня нет документа как такового. Боюсь, я не уверен, как это связано с тем, что я делаю. – Luke
UIManagedDocument предназначен не только для iCloud. Он предоставляет «предварительно построенный» основной стек данных: основной MOC с собственным родителем MOC, работающим на фоновом потоке. –
Я понятия не имею, что такое MOC, этот комментарий был намного выше моей головы. Мне не удалось найти какую-либо документацию или учебники для нее, которые не ужасно запутывают - потребовалось бы переписывать весь мой код Core Data для его реализации? – Luke