2009-02-20 2 views
0

Хотя вы можете освободить ссылку на объект CGImageRef, используя «CGImageRelease», который, согласно SDK, это «уменьшает количество удержаний растрового изображения», есть ли способ проверить текущий счетчик времени для экземпляра CGImageRef? [cgImageRef retainCount] недействителен, поскольку CGImageRef не является действительным получателем сообщения keepCount.Получение значения удержания для объекта CGImageRef?

Другими словами, во время dealloc в классе, который отображает EAGLContext, я хочу удостовериться, что выпущены какие-либо выдающиеся ссылки на объекты CGImageRef, но я, очевидно, не хочу вызывать CGImageRelease (someCGImageRef), если его счет сохранения уже 0. На практике я обнаружил, что просто проверка того, соответствует ли ref ref nil, не соответствует текущим значениям счетчика удержания.

Лучше всего просто установить экземпляр CGImageRef на нуль после того, как вы закончите с ним, и вы уже выпустили его, чтобы чек (someCGImageRef == nil) дал вам знать, есть ли выдающийся ссылку на него?

Благодаря

ответ

1

Если я правильно читать документы, CGImageRelease, как CFRelease за исключением того, что она обрабатывает NULL по-разному. Это означает, что CFGetRetainCount должен работать до тех пор, пока cgImageRef не является NULL.

Итак, я прочитал остальную часть вашего вопроса после этого. Вы не должны вызывать CFGetRetainCount на объекте, который может уже иметь keepCount из 0, так как к тому времени объект уже уничтожен. Вместо этого установите значение NULL.

(NULL и ноль эквивалентны, но ноль для объектов Objective-C. CGImageRef не один из тех, так что вы, вероятно, следует использовать NULL, чтобы избежать путаницы себя позже.)

+0

Что странно, что даже после того, как тестирование для не NULL и передачи, вызов CFGetRetainCount в экземпляре CGImgeRef приводит к сбою в моем случае, когда я пытаюсь очистить контекст EAGL. Пока я просто устанавливаю экземпляры CGImageRef в ноль, и я не вижу утечек. –

Смежные вопросы