gpt4 book ai didi

iphone - 保留 IBOutlet 数量

转载 作者:行者123 更新时间:2023-12-03 16:49:07 30 4
gpt4 key购买 nike

虽然编码时总是出现有关 IBOutlet 保留计数的相同问题:从 NIB 取消归档对象后保留计数?何时对 IBOutlet 使用 @property?设置时保留还是分配? Mac 和 iPhone 之间的区别?

所以我读了The Nib Object Life Cycle来自苹果的文档。 Mac 和 iPhone 上的一些测试应用程序给了我一些奇怪的结果。尽管如此,我还是写下了一些如何处理这个问题的规则,以便在编码时保持快乐,但现在想向社区进行验证并听取您的意见和经验:

  1. 始终为顶级对象创建 IBOutlet。对于非顶级对象(如果需要)(需要访问)。
  2. 始终为 IBOutlet 提供如下属性(并在必要时释放它们!):
    • Mac 上的顶级对象:
      • @property(非原子,分配)IBOutlet SomeObject *someObject;
      • @synthesize someObject;
      • [self.someObject 释放];
    • Mac 上的非顶级对象(无发布):
      • @property(非原子,分配)IBOutlet NSWindow *window;
      • @synthesize someObject;
    • iPhone 上的顶级对象(必须保留):
      • @property(非原子,保留)IBOutlet SomeObject *someObject;
      • @synthesize someObject;
      • [self.someObject 释放];
    • iPhone 上的非顶级对象(应保留):
      • @property(非原子,保留)IBOutlet UIWindow *window;
      • @synthesize窗口;
      • [self.window释放];

旁注:

  • 在 Mac 和 iPhone 上, socket 连接是通过 setter (如果有)进行的。
  • 顶级对象:“没有[...]拥有对象”
  • 非顶级对象:“具有父对象或所属对象的任何对象,例如嵌套在 View 层次结构中的 View 。”

所以问题是:这是正确且良好的做法吗?

希望您能批准或更正。

最佳答案

始终让您的 Nib 的文件所有者是 NSWindowController 或 NSViewController(在 Mac OS X 上)或 UIViewController(在 iPhone 上)的子类,并使用 @property(保留)IBOutlet 为其所有 socket ,在 Controller 子类 -dealloc 方法中进行适当的释放。

此模式在 Mac OS X 和 iPhone 操作系统上都可以正常工作,因为 Mac OS X 上的 NSWindowController 和 NSViewController 为您获取顶级对象的隐式所有权(并在它们自己的 -dealloc 方法中放弃它),并且 iPhone OS 在 nib 加载期间不会为您获取顶级对象的任何隐式所有权。

关于iphone - 保留 IBOutlet 数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2097822/

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