Обычно (особенно это видно из кода Apple) вы получаете доступ к свойствам другого класса, а не к его иварам. Класс может иметь больше (или меньше) иваров для хранения других значений, которые не должны беспокоить пользователей класса.

онен использовать свойства исключительно в своих классах, особенно теперь, когда вы можете объявлять свойства в расширении класса благодаря современной среде выполнения Objective-C 2.0 - я использую эту функцию для создания «частных» свойств.

У меня вопрос, есть ли какая-либо веская причина когда-либо объявлять ivars в интерфейсе класса? Я предпочитаю, чтобы мои общедоступные интерфейсы были минимальными и чистыми, насколько это возможно, раскрывая только те аспекты моего класса, которые уместны.

Например, я хотел бы сделать следующее:

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

Если не считать предпочтений стиля кода, есть ли какие-то проблемы с тем, чтобы полностью избежать использования ивара?

Ответы на вопрос(4)

Ваш ответ на вопрос