我在stackoverflow和许多其他网站上查找了我当前的问题,但我很有点困惑,说实话。我应该只在另一个类需要访问它时才使用属性,而当它仅用于我的私有类时是否应该使用iv?这是我到目前为止所得到的,虽然我确实听到了关于何时使用ivars和属性的其他一些事情。我只是想保持我的代码干净,更现代。任何澄清将不胜感激。
答案 0 :(得分:3)
这是一个非常基于意见的主题。因此,我试图坚持无争议的事实和建议:
NSString
,NSArray
等人提供正确的所有权处理。 (copy
)。atomic
)。在实施过程中是否使用ivars的实际决定取决于个人喜好。它受到代码风格中许多微妙细节的影响。
答案 1 :(得分:0)
在我看来 - 如果你没有覆盖吸气剂和设定器,你应该只使用由ivar支持的属性。
您应该在公共界面中声明它们以使它们公开,并在私人界面中声明它们,使它们成为私有。
这有很多好处,有些是:
在您的课程中,您应该几乎始终通过getter / setter访问您的属性,除非:
以下是一些如何解释以下几点的例子:
@interface SomeObject : NSObject
@property (strong, nonatomic) NSMutableArray * objects;
@property (readonly, nonatomic, getter=isActive) BOOL active; // Public read-only
@end
@interface SomeObject()
@property (readwrite, nonatomic, getter=isActive) BOOL active; // Can be updated internally
@property (nonatomic, getter=isVisible) BOOL visible;
@end
@implementation SomeObject
- (NSMutableArray)objects {
if (!_objects) {
_objects = [NSMutableArray array]; // Lazy instantiate when first accessed
}
return _objects;
}
- (BOOL)isActive {
return _isActive && self.isVisible; // Cannot be active if not visible
}
- (BOOL)setActive:(BOOL)active {
self.visible = active; // Keep visibility same as active
_active = active;
}
-(BOO)setVisible:(BOOL)visible {
_visible = visible;
// perform animation or something else...
}
@end
使用ivars无法实现任何目标。
答案 2 :(得分:-2)
您应该在类的内部和外部使用声明的属性。大多数开发人员说你应该只在初始化器中的属性后面设置ivar。 (在这种情况下,我不同意并使用制定者和吸气剂,但我是少数人。)