【问题标题】:Adding Outlets in Xcode 4在 Xcode 4 中添加 Outlets
【发布时间】:2011-05-26 21:06:30
【问题描述】:

我通过将一个 UI 组件从 XIB 编辑器中拖动到我的视图控制器的头文件中来创建 IBOutlets。我在花括号内拖放,以便将它们简单地视为实例变量而不是属性。然而,尽管如此,我注意到我的 viewDidUnload 和 dealloc 方法中的发布声明。这不是不必要的吗?就像我说的,这些不是我要创建的属性。为什么在没有保留、分配、复制等的情况下生成释放这些对象的代码?

【问题讨论】:

    标签: iphone ios memory-management xcode4


    【解决方案1】:

    在 iOS 上,如果一个 outlet 被声明为一个 ivar 而不是一个属性,您有责任在适当的时间(即在-dealloc-viewDidUnload 中释放它。您还应该将它们设置为@987654323 @ 在后者中。)

    这是由于 iOS 上的内存管理的一个怪癖。无论如何,我个人的偏好是避免使用readwrite 属性作为插座,因为恕我直言,它以一种糟糕的方式破坏了视图控制器的封装。

    【讨论】:

    • 我不明白的是,如果我没有分配、保留或复制一个出口,我为什么要释放它?
    • 通常你不会。这是一个罕见的例外。您的release 平衡了笔尖解码时完成的retainalloc
    【解决方案2】:

    我认为原因是您的所有网点都应该保留属性。这样,所有视图子视图(您的按钮等)都将保证比视图本身寿命更长。我从未听说过以您的方式进行编码。通常您只需键入代码并在 .xib 中连接您的插座。

    【讨论】:

    • 真的吗?好吧,我之前也是这么想的,但后来我偶然发现了这本书:Bill Dudney 和 Chris Adamson 的 iPhone SDK Development。在大多数示例中,他们没有将 IBOutlets 声明为属性!
    • 查看 Apple 文档。向下滚动此页面的一半,其中讨论了网点。 developer.apple.com/library/ios/#documentation/iphone/…。您还可以在此页面上查看他们讨论将视图控制器设置为属性以确保它与应用程序一样长。 developer.apple.com/library/ios/#documentation/iphone/…。子视图也是如此。您不希望在屏幕上显示您的视图
    【解决方案3】:

    你不需要让它们成为属性,Objective-C 2.0之前没有包含属性,属性只是语法糖。

    当它们从笔尖中拔出时会保留下来。

    查看The Nib Object Life Cycle 部分

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 2011-10-11
      • 2013-07-15
      • 2011-07-20
      • 1970-01-01
      • 2011-09-01
      • 2011-09-03
      相关资源
      最近更新 更多