Мне любопытно, если я следую правильному управлению памятью с помощью CGImageRef, с которым я проходил несколько методов (так как это объект CG, я полагаю, что он не поддерживает автоматическое оповещение). Управление памятью с помощью non-NSObjects и взаимодействие с другими NSObjects по-прежнему несколько нова для меня.Освобождение CGImage (CGImageRef)
Вот что я делаю:
Я создаю CGImageRef внутри моего образа диспетчера кэша с CGBitmapContextCreateImage (сохранить счетчик 1), и добавить его в NSMutableDictionary (сохранить счетчик 2).
Когда CALayers используют изображение, я назначаю его layer.contents (сохранить значение +1) и очищая содержимое с помощью layer.contents = nil (сохранить счет -1) перед удалением слоя.
Наконец, при очистке текстуры, я называю CGImageRefRelease и [NSMutableDictionary removeObject], чтобы сохранить счетчик как 0.
Является ли это правильный способ сделать это?
Спасибо за ссылку, отличный ресурс, многое разъясняет. В документах указано, что CGImageRelease не приведет к ошибке, если изображение NULL, поэтому звук более безопасный. removeObject: forKey :, да, это один. – Rudi
** Документ, на который вы ссылаетесь, не поддерживает ваше требование. ** Некоторые объекты Core Foundation являются «бесплатными мостами» для классов Cocoa, но не для всех. Вы можете использовать 'CFStringRef' для' NSString * 'и наоборот, но вы не можете сделать это с помощью 'CGImageRef' и' UIImage'. – benzado
Я утверждаю, что объекты CF поддерживают 'release' и' autorelease'. В этом документе явно сказано так: «Обратите внимание, что в примере, что функции управления памятью и методы также взаимозаменяемы, вы можете использовать« CFRelease »с объектом Cocoa и' release' и 'autorelease' с объектом Core Foundation.» Кроме того, Ссылка CGImage говорит о том, что CGImage спускается из CFType: http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Reference/CGImage/ –