iphone - 保留 IBOutlet 数量

标签 iphone objective-c cocoa macos nib

虽然编码时总是出现有关 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/

相关文章:

cocoa - 如果不需要使其失效,是否有任何理由保留预定的 NSTimer?

iphone - 在 iPhone 和 Web 服务之间传输图像

iphone - iOS:框架放置不正确

ios - uitableview + 导航 Controller 设置所选元素的标题

macos - 有没有办法遍历 Mac OS X 中所有打开的窗口?

ios - CALayer drawinContext 调用@60fps 但查看更新图形@1fps

iphone - mobile safari 如何处理 pdf 以便提供搜索功能?

iphone - 设置 Wi-Fi 连接

objective-c - 使用 http POST 上传多个文件

iphone - NSDate、NTP 和载波时间