即使CGPathRef已发布,CAShapeLayer如何继续在路径(CGPathRef)上绘图?

问题描述:

我有这样的代码:即使CGPathRef已发布,CAShapeLayer如何继续在路径(CGPathRef)上绘图?

CGPathRef cgPath = [path quartzPath]; 
    self.blackLine.path = cgPath; 
    self.whiteDashes.path = cgPath; 
    CGPathRelease(cgPath); 

我们设置CAShapeLayers(self.blackLineself.whiteDashes)路径此CGPathRef

然后立即释放路径

但为什么在shapelayers仍然得出正确的路径?当您指定path属性时,它是否创建副本?或者它是否与refreference键后缀有关?

对此很好奇,但根据苹果API编程的一般理念,要记住的重要一点是你不必关心。内存管理的设计使每个组件只需要采用本地视角。你的工作是让你的部分正确,并依靠其他组件正确地完成它们的部分,这足以使一切正常工作。

换句话说,你可以依赖CAShapeLayer做它需要在其设置器中为path属性做的事情,而不需要知道细节。实际上,细节对于实现是私有的,所以你不能真正了解它们。而且,即使你深入研究它们,它们也可能在未来的实施中发生变化,因为没有设计合同可以阻止它。

这就是说,它几乎肯定会使用CGPathCreateCopy()或类似的东西来制作副本。它可以通过使用CGPathRetain()(它将不得不平衡未来呼叫到CGPathRelease())来保护它免于路径的释放,但是这不足以保护它免受呼叫者传递可变路径并且随后改变它。制作副本可以防止这两种情况。