我倾向于只在类中使用属​​性,尤其是由于现代的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的充分理由。

10-08 09:14