当我需要一个私有(private)对象时,我目前使用属性,如下所示:
// Class extension in .m file
@interface MyClass()
@property (strong, nonatomic) NSArray* myInternalArray;
@end
self.myInternalArray = something;
或者你可以这样做:
@implementation MyClass {
NSArray* _myInternalArray;
}
_myInternalArray = something;
如果没有自定义 setter 或 getter,两者是等价的。内部变量的最佳实践是什么?一种方法比另一种方法有什么优势吗?
最佳答案
虽然有些人可能会争辩说选择是偏好问题,而且他们确实有一点,但有一个很好的理由,大多数现代语言都支持属性并使它们更容易编写代码。
ARC 的引入并没有显着降低属性的值(value)。这一切都归结为这一点——在一个属性中,您封装了变量的使用。这种封装在需要时是无价的,而在不需要时也没有太多开销。
例如(不经意间)假设您发现在保存值之前需要对其进行验证。如果您使用的是 iVar,则必须确保在使用 iVar 的任何地方,在允许更改其值之前调用验证代码。使用属性,您只需要重写 setIVarName:
并将验证放在那里。有人可能会争辩说,一个和另一个一样简单——在很多情况下这可能是真的,但这里的 iVar 有一个障碍——你不能确保 future 的变化(由你或其他编码人员)会在之前插入验证iVar 已更改。在这里使用属性确实有这种保证。
就个人而言,我尽可能使用属性而不是 iVar。
关于iphone - 内部属性与 ivars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10469488/