Хорошо, да, но часто свойства могут быть полезны в самой реализации, даже если свойства не будут установлены вне реализации.
Например, предположим, у вас было
@interface SomeObject : NSObject {
NSThing *thing;
}
@end
@implementation SomeObject
- (id)init {
if((self = [super init]))
thing = [[NSThing someThing] retain];
return self;
}
- (void)someMethod {
if(thing)
[thing release];
thing = [[NSThing someOtherThing] retain];
}
// etc etc
@end
Зачем вам нужно проверять, было ли выделено thing
, отпустить thing
, установить его на что-то другое, а затем retain
снова, когда вы можете просто сделать:
- (id)init {
if((self = [super init]))
[self setThing:[NSThing someThing]];
return self;
}
- (void)someMethod {
[self setThing:[NSThing someOtherThing]];
}
Если вы не хотите, чтобы эти свойства были доступны за пределами вашего класса, вы можете использовать категорию
@interface SomeObject ()
@property (retain) NSThing *thing;
@end
в вашем файле .m.