我一直遇到UIViewControllers的情况,其中包含大量的IBOutlets,将控制器连接到其视图的子视图(通常是UILabels).
继"最佳实践",即使用保留的所有UI元素:@property (retain, nonatomic) UILabel *theElement1,@property (retain, nonatomic) UILabel *theElement2,...给我疯了大量的锅炉板代码dealloc,并viewDidUnload在视图控制器.
违规IBOutlets永远不会被使用,也不会在UIViewController之外设置(set-method仅用于viewDidUnload和加载nib时),除非在加载nib时自动执行.
"最佳实践"的结果是:
dealloc与散落[theElement1 release],[theElement2 release]等等.viewDidUnload用[self setTheElement1:nil],[self setTheElement2:nil]等等.但是,由于所有这些元素都已被视图保留,并且UIViewController在适当的时候释放了视图,因此我完全没有理由手动管理它.
这种特殊"最佳实践"(据我所知)的原因是与您的保留一致.但是,一旦你开始拥有大量的网点,你就更有可能错过在两种方法中的任何一种方式处理某个插座,而不是你无法正确地改变网点以"保留"你真正想要的那些特殊插座即使在观看结束后再保留.
这个"最佳实践"除了我所知道的之外还有什么理由,或者在UIViewController视图的子视图的特定情况下我是否可以自由地打破这个"规则"?
您应该坚持这种最佳实践。当您在内存警告后访问 IBOutlet 时,它可以保护您免受非常奇怪的崩溃。是的,您需要手动管理 IBOutlet。Accessorizer在自动化此代码方面做得很好。
在 ObjC 2.0 之前,我们也必须手动编写所有访问器(@property 和 @synthesize 是该语言的新增功能)。事情变得好多了。当我们转向 64 位 ABI 和垃圾收集时,事情变得更加简单(你应该期望这些东西最终会出现在 iPhone 上)。
但现在,请遵循Nib 对象的内存管理中规定的内存管理规则。您可以用少量的输入来换取大量的调试。(嗯,看起来他们又更新了这个文档;是时候自己研究一下了。)
| 归档时间: |
|
| 查看次数: |
604 次 |
| 最近记录: |