Вопрос

Когда вы создаете Clayer как так, а затем получить контекст ... кажется, невозможно Выпустите CGContextref?

Выпуск самого Cglayerref (по -видимому) работает нормально.

Вы могли бы подумать, что вы могли бы выпустить CGContextref незадолго до выпуска Clayer - но нет? Вы также не можете выпустить Cgcontextref сразу после освобождения Clayer.

Если вы выпустите CGContexTref, приложение сбоя.

CGLayerRef aether = CGLayerCreateWithContext(
    UIGraphicsGetCurrentContext(), CGSizeMake(1024,768), NULL);
CGContextRef weird = CGLayerGetContext(aether);

// paths, strokes, filling etc
// paths, strokes, filling etc

// try releasing weird here
CGLayerRelease(aether);
// or, try releasing weird here

Кто -нибудь знает, что здесь происходит? (Обратите внимание, что cgcontextrelease действительно такой же, как и cfreLease, с некоторой проверкой нуля.)

На самом деле вы никогда не должны выпускать cgcontextref? Кто-нибудь знает? Ваше здоровье.

CGContextRelease(weird); // impossible, not necessary, doesn't work???

Что касается впечатляющего ответа Джоэла ниже:

Выпускает Cglayerref Правильно и правильно? Джоэл отметил:
«Да, поскольку функция, от которой вы ее получаете, имеет« создание »в своей подписи. См.: Документация/CoreFoundation/»

Это было полезно?

Решение

Вы не владеете контекстом, возвращенным из CglayergetContext, и поэтому не должны его выпускать*. В частности, см. http://developer.apple.com/library/mac/#documentation/corefoundation/conceptual/cfmemorymgmt/concepts/ownership.html#//apple_ref/doc/writerid/cfgetrule Для получения информации о функциях «получить» в основном фонде.

*: По крайней мере, вы не должны выпускать его, учитывая ваш пример кода. Если вы сохранили его сначала (cgcontextretain (странно)), то у вас должен быть cgcontextrelease, чтобы сбалансировать его.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top