【发布时间】:2013-05-20 06:17:46
【问题描述】:
我一直相信运行时会在创建对象时自动将所有属性初始化为 nil。
但 App Store 的发布版本与开发期间的调试版本不同。我听说 Xcode 使用各种安全检查机制围绕变量和属性创建了更稳定的调试版本,这些机制可以防止崩溃但会使代码膨胀。
当您为分发而构建时,神话也是如此,编译器优化会去除这些“不必要的”调试代码以使代码更快。
我已经遇到过在发布版本中突然发生的神秘错误。
但现在一位开发人员也告诉我:在发布版本中,运行时不会将属性设置为 nil。它们未初始化。它们的价值是垃圾内存,除非您手动执行。所以!foobar 是不安全的,除非你用 nil 初始化属性。
到目前为止,除非我设置对象,否则我的所有应用程序始终假定属性为 nil。
这是正确的,还是在我们创建对象时运行时仍会将我们的属性初始化为 nil?
【问题讨论】:
-
据我所知,Objective-C 对象中的所有实例变量在分配对象时都设置为零/nil。仅在调试模式下执行此操作是非常愚蠢的(虽然 Cocoa 设计人员做了一些愚蠢的事情,但我从未见过如此愚蠢的事情)。
-
虽然有时将
init中的实例变量归零/为零并不是一个愚蠢的想法。您可能会这样做,例如,当您有一堆东西要初始化时,其中大部分都被初始化为非零值。作为文档,您可以继续并将其余部分归零,按照声明的顺序放置初始化 - 成本很小,它有助于确保您已经涵盖了所有内容。 (当然,您也可以添加初始化语句并将其注释掉,或者只是添加该变量自动初始化的注释——这取决于您选择的样式。)
标签: ios objective-c memory-management properties