为 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
的引用,您的层将不会被释放,直到它们删除它们的引用。
我有一个自定义的 NSView
class,它是有图层支持的。我为在 makeBackingLayer
.
NSView
创建了一个 CAMetalLayer
在makeBackingLayer
中我创建了一个图层CAMetalLayer *backingLayer = [CAMetalLayer layer];
并根据我的需要设置属性。
我的问题是,我是否需要在销毁 NSView
时显式 dealloc
这一层?
我没有在覆盖函数中创建这个层,我有责任删除它还是 NSView 会处理它?
我没有看到任何关于此的文档。而且,我看到的所有样本都没有提到删除任何地方的图层。
谢谢
您可能不需要手动释放图层。假设您的程序启用了 ARC(自动引用计数),您的 NSView
应该会在其销毁时自动释放任何 CALayer
设置为其 .layer
属性。
如果您不确定是否启用了 ARC,可以转到 Xcode 项目中的构建设置并搜索自动引用计数。多年来,新的 Xcode 项目默认启用它。
注意:您的 NSView
只有在它是唯一持有对它的引用的对象时才能释放您的图层。如果您程序中的其他对象持有对您的 CAMetalLayer
的引用,您的层将不会被释放,直到它们删除它们的引用。