Сегодня я столкнулся с интересной проблемой iOS, связанной с CATiledLayer. Это происходит только на устройстве - не в симуляторе.CATiledLayer drawInContext, вызванный после того, как связанный вид ушел
Мой взгляд рисует в своем CALayer через drawLayer: inContext: делегировать обратный вызов. Этот слой имеет подуровень, полученный из CATiledLayer, который делает свой собственный чертеж в переопределенном методе drawInContext :.
Оба слоя визуализируют PDF-контент через CGContextDrawPDFPage(). (CALayer рисует версию с низким разрешением, в то время как подуровень CATiledLayer рисует содержимое hi-res сверху.)
Я столкнулся с сценарием, где я бы сделал это с представлением - удалит его из своего супервизора и отпустит его , На вид вызывается dealloc(). Спустя некоторое время метод drawInContext: метод CATILELayer будет вызываться (в фоновом потоке) системой. Он будет рисовать, но по возвращении из метода Springboard рухнет, и при этом снимет мое приложение.
Я установил его, установив флаг в CATiledLayer, указав, что он больше не отображается, из метода dealloc представления.
Но я могу только представить, что есть более элегантный способ. Как получилось, что метод CATiledLayer drawInContext: по-прежнему вызывался после родительского слоя, и представление родительского слоя было освобождено? Каков правильный способ закрыть представление, чтобы этого не произошло?
Это отлично работает для меня, просто и эффективно. –
Если представление уже освобождено, как работает self.superview (доступ к себе, освобожденный объект)? –