Базовые данные управляют временем жизни объекта так же, как и остальная часть Какао управляет временем жизни объекта: экземпляры NSManagedObject в контексте управляемого объекта сохраняются в памяти до тех пор, пока контекст управляемого объекта или любой другой объект сохраняет право собственности на их (через -[NSObject retain]
. По умолчанию NSManagedObjectContext
не сохраняет экземпляры, поэтому они освобождаются, как только другие владельцы (т.е. ваши NSFetchedResultsController
экземпляры или другие экземпляры в вашей программе) выпускают их. Вы можете изменить это Поведение контекста управляемого объекта по умолчанию для сохранения экземпляров, но вы редко этого хотите. Контекст управляемого объекта имеет для сохранения экземпляров, которые обновляются до следующего сохранения. Нет способа сохранить эти изменения, кроме объекта экземпляра до тех пор, пока контекст не будет сохранен. Таким образом, чтобы минимизировать использование памяти объектами Core Data, следуйте стандартным правилам: освободите их как можно скорее. Если вы обнаружите, что использование контекстной памяти растет (используйте инструменты Core Data инструментов для отслеживания это), за исключением т Он будет чаще использовать контекст, если вы обновляете экземпляры и, следовательно, сохраняете их в контексте до следующего сохранения, даже если вы их иным образом выпустили.
Использование NSFetchedResultsController
делает все это проще. Фактически, причина существования NSFetchedResultsController
заключается в том, чтобы облегчить программисту пакетную выборку в среде с низким объемом памяти (например, в iPhone).
Как упоминал Луи, NSPersistentStoreCoordinator
поддерживает кэш строк для кэширования данных экземпляра в памяти вместо того, чтобы возвращаться на диск при сбое объекта в контексте управляемого объекта. Однако это деталь реализации Базовых данных (хотя ошибки в кэше снижают производительность; вы можете отслеживать ошибки в инструментах). Core Data управляет кеш-памятью, и вам не нужно об этом беспокоиться.