为 NSView 删除 CAMetalLayer

Deleting CAMetalLayer for NSView

我有一个自定义的 NSView class,它是有图层支持的。我为在 makeBackingLayer.

中创建的 NSView 创建了一个 CAMetalLayer

makeBackingLayer中我创建了一个图层CAMetalLayer *backingLayer = [CAMetalLayer layer];并根据我的需要设置属性。

我的问题是,我是否需要在销毁 NSView 时显式 dealloc 这一层? 我没有在覆盖函数中创建这个层,我有责任删除它还是 NSView 会处理它?

我没有看到任何关于此的文档。而且,我看到的所有样本都没有提到删除任何地方的图层。

谢谢

您可能不需要手动释放图层。假设您的程序启用了 ARC(自动引用计数),您的 NSView 应该会在其销毁时自动释放任何 CALayer 设置为其 .layer 属性。

如果您不确定是否启用了 ARC,可以转到 Xcode 项目中的构建设置并搜索自动引用计数。多年来,新的 Xcode 项目默认启用它。

注意:您的 NSView 只有在它是唯一持有对它的引用的对象时才能释放您的图层。如果您程序中的其他对象持有对您的 CAMetalLayer 的引用,您的层将不会被释放,直到它们删除它们的引用。