iphone - 内部属性与 ivars

标签 iphone objective-c ios automatic-ref-counting

当我需要一个私有(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/

相关文章:

ios - Kotlin / native : Can someone help me in suggesting how to create a frozen singleton that takes in init parameters?

ios - 从服务器更新 PFUser

iphone - iCarousel 在用户选择的索引处停止

c - Objective-C 预处理器可用吗?

Objective-C valueforKey

objective-c - 识别 iOS 项目中每个文件的 LOC - 基于 ObjectiveC 的应用程序开发

ios - uinavigationcontroller 中的 Storyboard 和后退按钮

iphone - Xcode - 根据正在编译代码的设备修改库搜索路径

iphone - 如何防止我的计时器应用程序被 iOS 终止

iphone - 有没有一种简单的方法可以按键值对 plist(字典数组)进行排序?