Я столкнулся с самой странной из проблем: иногда добавление подслоя в CALayer не работает ([layer addSublayer:child]
), то есть счетчик подслоя остается равным 0 и ничто не отображается на экране.
Иногда это работает , и дочерний слой появляется на экране, как я и ожидал.Когда это не так, обычно выполнение чистой сборки исправляет это, но не всегда.Я также экспериментировал с запуском двух экземпляров моего приложения из Терминала, обычно второй экземпляр показывает проблемное поведение.
Вот (сокращенно) код:
NSLog(@"Retain count before: %d", [childLayer retainCount]);
// [parentLayer insertSublayer:childLayer atIndex:0]; // same problem here
[parentLayer childLayer];
NSLog(@"Retain count after: %d layer: %@", [childLayer retainCount], childLayer);
NSLog(@"Sublayercount: %d", [[parentLayer sublayers] count]);
Дочерний уровеньбазовый слой с фоном, установленным на цвет RGB.
Вывод отладки:
layer: <CALayer: 0x1982b0> X: 50.00 Y: -90.00 width: 200.00 height: 200.00
Retain count before: 2
Retain count after: 2 layer: <CALayer: 0x1982b0>
Sublayercount: 0
Когда это работает, вышеприведенный вывод показывает, что счетчик хранения правильно увеличивается до 3
иподуровень к 1
.
Есть ли что-то особенное в CALayers?addSublayer
полагается на что-то еще / выполняет проверки достоверности подслоя?
Кто-нибудь может предложить способ отладки этого?Есть ли способ, как я могу войти в addSublayer
с помощью отладчика?
Спасибо!Марк.