Objective c CALayer addsublayer不添加子层
我遇到了最奇怪的问题:有时将子层添加到CALayer中不起作用(Objective c CALayer addsublayer不添加子层,objective-c,core-animation,calayer,Objective C,Core Animation,Calayer,我遇到了最奇怪的问题:有时将子层添加到CALayer中不起作用([layer addSublayer:child]),即子层计数保持在0,并且没有任何内容被绘制到屏幕上 有时它确实起作用,子层显示在屏幕上,正如我预期的那样。如果没有,通常执行干净的构建会修复它,但并不总是这样。我还尝试从终端运行我的应用程序的两个实例,通常第二个实例显示有问题的行为 以下是(缩写)代码: 子层是背景设置为RGB颜色的基本层 调试输出: layer: <CALayer: 0x1982b0> X: 50.
[layer addSublayer:child]
),即子层计数保持在0,并且没有任何内容被绘制到屏幕上
有时它确实起作用,子层显示在屏幕上,正如我预期的那样。如果没有,通常执行干净的构建会修复它,但并不总是这样。我还尝试从终端运行我的应用程序的两个实例,通常第二个实例显示有问题的行为
以下是(缩写)代码:
子层是背景设置为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
图层:X:50.00 Y:-90.00宽度:200.00高度:200.00
保留前计数:2
保留计数后:2层:
子层计数:0
当它工作时,上面的输出显示保留计数正确增加到3
,子层计数正确增加到1
CALayers有什么特别之处吗?addSublayer
是否依赖其他内容/执行子层的有效性检查
有人能提出一种调试方法吗?有没有办法使用调试器进入addSublayer
谢谢!马克。我终于明白了。有时候只谈论(好吧,发帖)这个问题是有帮助的 结果是我初始化保存层的自定义视图的方式有问题。对应用程序控制器和视图的
awakeFromNib
调用之间存在竞争条件。应用程序控制器将加载自定义层,但有时自定义视图尚未初始化
解决方案是将app controller中视图的初始化代码从
awakeFromNib
移动到applicationdidfishlaunching
我终于找到了答案。有时候只谈论(好吧,发帖)这个问题是有帮助的
结果是我初始化保存层的自定义视图的方式有问题。对应用程序控制器和视图的awakeFromNib
调用之间存在竞争条件。应用程序控制器将加载自定义层,但有时自定义视图尚未初始化
解决方案是将应用程序控制器中视图的初始化代码从
awakeFromNib
移动到applicationdidfinishLaunching
重新计数
是无用的;别叫它
很高兴你解决了这个问题。
retainCount
没用;别叫它
很高兴你解决了这个问题。-retainCount几乎从来都不是调试的好基础。-retainCount几乎从来都不是调试的好基础。太棒了,我需要一个。或者是一个橡皮鸭调试标签?太棒了,我需要一个。或者是一个橡皮鸭调试标签?
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