首页 > 解决方案 > 为 NSView 删除 CAMetalLayer

问题描述

我有一个NSView由图层支持的自定义类。我CAMetalLayer为此制作了一个NSViewmakeBackingLayer.

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

我的问题是,我是否需要dealloc在破坏时明确地使用这一层NSView?我没有在覆盖的函数中创建这个层,我有责任删除它还是 NSView 会处理它?

我没有看到任何有关此的文档。此外,我看到的所有示例都没有提到在任何地方删除图层。

谢谢

标签: calayernsviewmetal

解决方案


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

如果您不确定 ARC 是否启用,您可以转到 Xcode 项目中的 Build Settings 并搜索 Automatic Reference Counting。几年来,新的 Xcode 项目默认启用它。

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


推荐阅读