Existe algum motivo para declarar ivars se você estiver usando propriedades exclusivamente no Objective-C?

Costumo usar propriedades exclusivamente em minhas classes, especialmente agora que você pode declarar propriedades em uma extensão de classe graças ao moderno tempo de execução do Objective-C 2.0 - eu uso esse recurso para criar propriedades "privadas".

Minha pergunta é se existe algum bom motivo para declarar mais ivars em uma interface de classe. Prefiro que minhas interfaces voltadas para o público sejam o mínimo e limpas possível, apenas revelando aspectos pertinentes da minha classe.

Por exemplo, eu tenderia a fazer o seguinte:

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

Deixando de lado as preferências de estilo de código, há algum problema em evitar ivars inteiramente como esse?

questionAnswers(4)

yourAnswerToTheQuestion