【发布时间】:2012-10-08 09:41:41
【问题描述】:
好的,所以我正在阅读一些关于 良好编程实践 的文章,我看到了一个声明,其中说为你的类公开你的所有元素并不是一个好主意。又名封装的概念。
现在在 Objective C 中,当我为我的类创建一个元素时,我会执行以下操作,考虑一个 NSMutableArray
@property (nonatomic, retain) NSMutableArray* myArray;
我为什么要这样做?
以便将 Retain 属性赋予 myArray,从而赋予它更简单的内存管理周期。稍后,我将 viewDidLoad 中的 myArray 初始化为
self.myArray = [NSMutableArray arrayWithCapacity:0];
稍后在 Dealloc...
self.myArray = nil;
还会发生什么
通过提供这个属性并在 .m 文件中合成 myArray,我在不知不觉中为我的类的所有元素制作公共 Getter 和 Setter。
此外,从 Xib 文件自动生成的 UI 元素确实应用了相同的声明。
继续为类的每个元素创建公共 Getter 和 setter 并不是一个好主意,对吧?
因此,绝对没有应用任何封装!如果我在这里错了,请纠正我并帮助我解决任何问题!
谢谢!
【问题讨论】:
-
您可以在
.m文件中声明一个属性,使其从外部不可见。 -
@Stas :但是我该如何管理它的内存管理周期呢?我想为每个元素赋予属性是最好的方法!
-
@Stas:甚至苹果公司都建议只声明属性而忘记 ivars。只声明属性并且根本不声明 ivar(LLVM 将在必要时为您声明支持变量)要简单得多,因为那时一切(内存管理以及原子性和 KVO)都是自动管理的。 (在极少数情况下,出于优化目的,您可能更喜欢 ivars 而不是属性,但总的来说这是不值得的)
-
不知道!非常感谢,将以您的回答为指导!
标签: iphone objective-c optimization encapsulation