【问题标题】:for a UIViewController which methods should a "release" and set to "nil" the outlets/instance variables?对于 UIViewController,哪些方法应该“释放”并设置为“nil”出口/实例变量?
【发布时间】:2023-03-07 23:40:01
【问题描述】:

对于 UIViewController,哪些方法应该“释放”并设置为“nil”出口/实例变量?

我应该使用“viewDidUnload”和“dealloc”中的哪些方法:

  1. 类中的 outlet 或其他成员变量的“释放”,以及
  2. “xxx = nil”(即设置为 nil)在

【问题讨论】:

    标签: iphone objective-c ios memory-management uiviewcontroller


    【解决方案1】:

    在 viewDidUnload 中,典型的做法是使用访问器将嵌入在视图控制器视图中的任何对象 - 按钮、视图、文本字段、可能位于视图层次结构中的 UIView 的任何后代都归零:

    self.myButton = nil;
    

    在 dealloc 中你应该直接释放所有保留的变量,包括子视图:

    [myButton release];
    [someStateObject release];
    

    【讨论】:

    • 谢谢 - 我有控制器,我在 dealloc 中“释放”然后“nil'ed”变量 - 这可以吗?如果没有任何想法,可能会出现什么问题?
    • 为什么这些应该以不同的方式完成?一般来说,如果我有保留属性,我倾向于总是将它们归零,因为在双重释放的情况下它更安全。你能解释一下 self.myButton = nil; 的任何情况吗?会引起问题吗?
    • @Greg 在 dealloc 中,有些人在释放后会 nil 变量,以防其他代码尝试访问它但没有保留该值。这样做并没有错。我个人认为这是矫枉过正。
    • @skorulis 你不应该在 dealloc 中使用访问器。您不能假设您确切知道访问器内部发生了什么,尤其是在您的类被扩展的情况下。访问器可能依赖于完全有效的对象,而在 dealloc 中通常不是这种情况。但是,有些人可能不同意。
    【解决方案2】:

    我相信在-dealloc,你应该直接使用ivars;在其他情况下,例如 -viewDidUnload,您需要将属性设为 nil。

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-04
      • 1970-01-01
      • 2011-01-21
      相关资源
      最近更新 更多