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