我遇到了最奇怪的问题:有时向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
?
谢谢!标记
答案 0 :(得分:2)
我终于明白了。有时候谈论(好吧,发布)这个问题会有所帮助。
事实证明,我初始化保存图层的自定义视图的方式存在问题。对应用程序控制器的awakeFromNib
调用与视图之间存在竞争条件。应用程序控制器将加载自定义图层,但有时自定义视图尚未初始化。
解决方案是将应用控制器中视图的初始化代码从awakeFromNib
移至appliationDidFinishLaunching
。
答案 1 :(得分:2)
retainCount
没用;不要叫它......
很高兴你能解决问题。