Я новичок в использовании дуги в своих проектах. Я пытаюсь понять __bridge и его маленьких друзей, чтобы правильно отображать свои CGImageRef при добавлении и удалении их из контейнеров.
Я получаю сообщение «Возможная утечка хранимого объекта…» в одной из своих строк. Вот основной цикл моего кода:
CGImageRef renderedRef = CGBitmapContextCreateImage(UIGraphicsGetCurrentContext());
[_array addObject: (__bridge_transfer id)renderedRef];//_array is an iVar
затем где-то в будущем я делаю это:
CGImageRef iRef = (__bridge_retained CGImageRef)array[0];
//then I do something fancy with iRef
//at the end of the method, I get "Potential leak of an object stored…"
//I have no idea what to do
//I've tried CGImageRelease(iRef); but it still doesn't change the warning.
Может ли кто-нибудь пролить свет на это? Кроме того, я пробовал просто использовать __bridge, но это не имеет значения.
Редактировать 1:
Я расширил результаты анализатора и следил за происходящим. Это произошло потому, что я использовал iRef в таком методе: [self doSomethingFancy:iRef]; и в этом методе iRef сохранялся, но не освобождался. Итак, это исправляет предупреждение, но я все еще немного озадачен.
Я не совсем понимаю, когда использовать различные приведения __bridge. При использовании ARC следующее увеличивает количество ссылок?
CGImageRef iRef = (__bridge CGImageRef)array[0];
Кроме того, в какой-то момент, если я скажу своему _array iVar удалить все объекты, будет ли это правильно уменьшать их счетчики ссылок?
CGImageRelease(iRef)
здесь правильно. Если у вас все еще есть предупреждение, нажмите на синюю иконку, чтобы получить подробный отчет о том, что думает Анализатор. - person Martin R   schedule 12.12.2013