Выпуск CGImage (CGImageRef)

Мне любопытно, следую ли я правильному управлению памятью с помощью CGImageRef, который я пропускаю через несколько методов (так как это объект CG, я предполагаю, что он не поддерживает autorelease). Управление памятью с не-NSObjects и взаимодействие с другими NSObjects все еще несколько ново для меня.

Вот что я делаю:

Я создаю CGImageRef внутри моего менеджера кэша изображений с помощью CGBitmapContextCreateImage (оставьте счетчик 1) и добавляю его в NSMutableDictionary (оставьте счетчик 2).

Когда CALayers используют изображение, я назначаю с layer.contents (оставьте счетчик +1) и очищаю содержимое с помощью layer.contents = nil (оставьте счетчик -1) перед удалением слоя.

Наконец, при очистке текстуры я вызываю CGImageRefRelease и [NSMutableDictionary removeObject], чтобы сохранить значение 0.

Это правильный способ сделать это?

1 ответ

Решение

Базовые объекты Foundation (то есть все объекты Core Graphics) поддерживают авто-релиз.

Шаги, которые вы описываете, должны работать просто отлично, а не протекать или чрезмерно освобождать объект.

я использую CFRelease вместо функций выпуска определенного класса, таких как CGImageRelease, но чисто как вопрос стиля. Я просто должен остерегаться NULL: CGImageRelease проверяет NULL, в то время как CFRelease потерпит крах при прохождении NULL, С помощью CGImageRelease и его братья и сестры означает, что вам не нужно беспокоиться об этом.

Я предполагаю, что вы имели в виду removeObject:forKey:не removeObject (который не существует и в любом случае не будет где-то указывать объект).

Другие вопросы по тегам