2. Сергей Пронин
Full-stack developer
CTO, Senior Dev, Co-Founder
App in the Air
Senior Developer
Empatika
Преподаватель
НИУ-ВШЭ
Департамент Программной Инженерии
8. Default
• Предлагается Xcode при
создании проекта
• Самый простой в понимании
• Вся работа проходит через
Main (UI) thread
• Подходит для маленьких
проектов с примитивным
хранением Store
Coordinator
Context
Main
9. Nested Simple
• I/O операции делаются
асинхронно через
PrivateConcurrency context
• Mid-level проекты, где данные
нужны в момент доступа
• Стандартный MagicalRecord
работает таким образом
• Main thread страдает при
больших объемах данных
Context
Private
Store
Coordinator
Context
Main
10. Nested Workers
• I/O операции делаются
асинхронно через
PrivateConcurrency context
• Одна из самых популярных
сборок вложенных контекстов
асинхронности
• Ведет себя лучше, чем Nested
Simple на больших объемах
• Изменения из workers все
равно проходят через Main
workers
Context
Private
Store
Coordinator
Context
Main
Context
Private
Context
Private
11. High-Performance
Concurrent Classic
• I/O операции делаются асинхронно
через PrivateConcurrency context
• Ведет себя почти идеально на
больших объемах
• Изменения из worker не касаются
Main
• Нужно “затягивать” изменения
• Записи из Main синхронны — нужно
сохранять большие объемы отдельно
worker
Store
Coordinator
Context
Private
Context
Main
12. High-Performance
Concurrent Modified
• I/O операции делаются асинхронно
через PrivateConcurrency
context
• Ведет себя почти идеально на
больших объемах
• Изменения из worker не касаются
Main
• Нужно “затягивать” изменения через
NSManagedObjectContextDidSaveNotification
• Записи Main асинхронны — удобство
использования
worker
Context
Private
Store
Coordinator
Context
Private
Context
Main
13. Performance
All Off-main Main
Default 4.2s 0.0s 4.2s
Nested
simple
18.647s 15.637s 3.010s
Nested
workers
18.927s 15.85s 3.077s
HP Classic 21.05s 20.9s 0.158s
14. Материалы
1. The concurrent Core Data Stack
2. Backstage with Nested Managed Object
Contexts
3. Concurrent Core Data Stacks – Performance
Shootout
4. Не нужно бояться CoreData
17. Heavy-weight migration
• Все, что не подходит под light-weight миграцию
• Изменение типа атрибута
NSMigrationManager — отвечает за миграцию,
принимает две модели (“из” и “в”)
NSMappingModel — хранит набор NSEntityMapping
NSEntityMapping — соотношение двух
NSEntityDescription между которыми будет маппинг
NSEntityMigrationPolicy — “политика” миграции,
обрабатывает преобразование каждого объекта
25. Runtime models
Advanced caching — write once, use anytime —
грамотно написанное runtime построение модели
позволяет полностью настраивать store с бекэнда
26. let entity = NSEntityDescription()
entity.name = “Person”
//если есть
entity.managedObjectClassName = “Person”
var properties = [NSAttributeDescription]()
let attribute = NSAttributeDescription()
attribute.name = “_id”
attribute.optional = false
attribute.indexed = true
attribute.type = .StringAttributeType
properties.append(attribute)
//...
entity.properties = properties
let model = NSManagedObjectModel()
model.entities = [entity]
let coordinator = NSPersistentStoreCoordinator(
managedObjectModel: model)
27. Материалы
1. Simple Core Data model in Runtime
2. Generating Registered Runtime Classes
3. Mike Ash Blog: Runtime Ambassador
28. Key Points
• Экспериментировать со сборками CoreData
стеков, чтобы найти удачный вариант
• Сложная миграция — это просто
• Вся CoreData без труда строится в runtime,
позволяя делать “гибкие” модели с бекенда
29. Курс НИУ ВШЭ — Swift
Идёт прямо сейчас. Все материалы на русском языке.
https://itunes.apple.com/ru/course/razrabotka-ios-prilozenij/id941293188?l=en
iTunes U