gpt4 book ai didi

macos - 如何销毁(解除分配)从 nib 文件加载的 View 项的实例

转载 作者:行者123 更新时间:2023-12-03 16:38:21 25 4
gpt4 key购买 nike

问题:

  • 每次我打开 Nib 时, Nib 中的项目的新实例都会出现创建后,有办法销毁(释放内存)它们吗?
  • 或者无法取消分配这些 View ,直到应用程序结束为止?

    询问原因:我在单独的 nib 文件中有 2 个 View 需要加载,因为即使删除了对 View 的所有强引用,我也无法销毁 nib View 项

尝试的步骤(未成功):

  • 将 View Controller 的 View 导出设置为 nil
  • 窗口 Controller 有一个 View Controller 强大的属性,我已经设置了为零

我的理解(基于一些测试)

  • 当我通过代码(使用 alloc)创建相同类型的 View 而不加载 nib 文件(NSBundle loadNibNamed)时,我能够销毁 View 实例。
  • 但是当由于加载 nib 文件而创建 View 时,尽管我已经删除了对该 View 的所有强引用,该 View 仍保持打开状态

请注意:这是一个 mac cocoa 项目,并使用自动引用计数(ARC)

我的项目详细信息:

  • 我有 3 个 nib 文件:
    • MyViewA.nib - 包含 MyViewA 类型的自定义 View
    • MyViewB.nib - 包含 MyViewB 类型的自定义 View
    • MyWindow.nib - 包含一个 NSWindow 和一个自定义 View ,我们称之为作为viewX供引用
  • 有一个窗口 Controller 和一个 View Controller
  • MyWindow.nib 有 2 个按钮,一个按钮用于加载 MyViewA 作为 viewX 的 subview ,另一个用于将 MyViewB 作为 subview 加载到 viewX
  • 我正在使用 NSBundle 加载 nib 文件
  • 当我尝试向 viewX 添加新的 subview 时,我使用removeFromSuperView 删除已经存在的 subview ,并删除对该 View 的所有强引用

我希望在使用完 nib 文件项后将其删除(销毁内存),但不知道如何实现。

最佳答案

我认为既然您使用 NSBundle 手动加载 Nib ,您需要手动释放 View 。由于您使用的是 ARC,因此无法直接调用release,但是您可以将其转换为 void * 并使用 CFRelease,如下所示:

CFRelease((__bridge void *)viewToRelease);

关于macos - 如何销毁(解除分配)从 nib 文件加载的 View 项的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9255398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com