gpt4 book ai didi

iphone - 保留 IBOutlet View 元素真的是最佳实践吗?

转载 作者:行者123 更新时间:2023-12-03 18:59:00 26 4
gpt4 key购买 nike

我不断遇到 UIViewControllers 包含大量 IBOutlet 将 Controller 连接到其 View 的 subview (通常是 UILabels)的情况。

遵循“最佳实践”,即在所有UI元素上使用retain:@property(retain,nonatomic)UILabel *theElement1@property(retain,nonatomic)UILabel *theElement2 code>, ... 在 View Controller 的 deallocviewDidUnload 中提供了大量的样板代码。

有问题的 IBOutlet 永远不会在 UIViewController 之外使用或设置(设置方法仅在 viewDidUnload 中以及加载 nib 时使用),除非在加载 nib 时自动使用。

“最佳实践”的结果是:

  • dealloc 散布着 [theElement1 release][theElement2 release]
  • viewDidUnload[self setTheElement1:nil][self setTheElement2:nil]

但是,由于已知所有这些元素无论如何都会被 View 保留,并且 View 由 UIViewController 在适当的时间释放,所以我认为绝对没有任何理由 让我手动管理它。

这个特定的“最佳实践”的原因(据我所知)是为了与您的保留保持一致。但是,一旦您开始拥有大量 socket ,您就更有可能错过在这两种方法中的任何一种中处理某些 socket 的机会,而不是您在正确更改 socket 以“保留”您真正想要的那些特殊 socket 时遇到困难即使在风景告别后也能保留。

除了我所知道的之外,这种“最佳实践”是否还有其他原因,或者在 UIViewController View 的 subview 的特定情况下,我是否应该随意打破此“规则”?

最佳答案

您应该坚持这种最佳实践。当您在内存警告后访问 IBOutlet 时,它可以保护您免受非常奇怪的崩溃。是的,您需要手动管理 IBOutlet。 Accessorizer在自动化此代码方面做得很好。

在 ObjC 2.0 之前,我们也必须手动编写所有访问器(@property 和 @synthesize 是该语言的新增功能)。事情变得好多了。当我们转向 64 位 ABI 和垃圾收集时,事情变得更加简单(您应该期望这些东西最终会出现在 iPhone 上)。

但现在,请遵循 Memory Management of Nib Objects 中规定的内存管理规则。 。您可以用少量的输入来换取大量的调试。 (嗯,看起来他们又更新了这个文档;是时候自己研究一下了。)

关于iphone - 保留 IBOutlet View 元素真的是最佳实践吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3112486/

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