придание ученикам свойств и их синтезирование - PullRequest
0 голосов
/ 14 августа 2010

Можно ли с уверенностью сказать, что если члену класса не нужны функции получения или установки, тогда нет смысла присваивать им свойства и синтезировать их?

1 Ответ

2 голосов
/ 14 августа 2010

Хорошо, да, но часто свойства могут быть полезны в самой реализации, даже если свойства не будут установлены вне реализации.

Например, предположим, у вас было

@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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...