我倾向于只在类中使用属性,尤其是由于现代的Objective-C 2.0运行时,您可以在类扩展中声明属性-我使用此功能来创建“私有(private)”属性。
我的问题是,是否有充分的理由再在类接口(interface)中声明ivars。我希望我的面向公众的界面尽可能地简洁和干净,仅能揭示类(class)中与之相关的方面。
例如,我倾向于执行以下操作:MyClass.h
:
@interface MyClass : NSObject
@property (nonatomic, copy) NSString * publicString;
@property (nonatomic, copy, readonly) NSString * readOnlyString;
@end
MyClass.m
:@interface MyClass ()
@property (nonatomic, copy, readwrite) NSString * readOnlyString;
@property (nonatomic, copy) NSString * privateString;
@end
@implementation MyClass
@synthesize publicString = publicString_;
@synthesize readOnlyString = readOnlyString_;
@synthesize privateString = privateString_;
- (void)init
{
self = [super init];
if (self != nil)
{
self.publicString = @"Public String";
self.readOnlyString = @"Read-Only String";
self.privateString = @"Private String";
}
return self;
}
- (void)dealloc
{
[publicString_ release];
[readOnlyString_ release];
[privateString_ release];
[super dealloc];
}
@end
除了代码样式首选项,完全避免这样的ivars是否有任何问题?
最佳答案
我可能已经找到了一个适合我明确使用ivars支持我的属性的答案。似乎调试器似乎不会列出任何自动合成的ivars,因此除了手动调用属性访问器外,没有其他方法只能在调试过程中钻取self
并检查各种值,这很繁琐。除非他们更改此设置,否则这可能是我回到明确声明ivars的充分理由。