Обычно (особенно это видно из кода 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
Если не считать предпочтений стиля кода, есть ли какие-то проблемы с тем, чтобы полностью избежать использования ивара?