Цель-C: Сделать iVars @public или @synthesizing @properties для них?Когда я должен использовать свойства? - PullRequest
1 голос
/ 24 января 2012

У меня есть несколько переменных экземпляра в моем классе, которые я хотел бы быть доступными в любом месте. Вот так:

@interface SomeObject : NSObject
{
    @public
        NSString *someString;
}
@end

@implementation SomeObject
@end

Я могу получить доступ к свойству из экземпляра, используя синтаксис ->, как показано ниже, как я сделал бы в C ++:

someObjectInstance->someString

Должен ли я сделать свойство для someString, когда все, что я хочу, это чтобы оно было доступно для внешнего мира? Я бы создал @property для someString в моем интерфейсе и @synthesize в моей реализации, что позволило бы мне получить к нему доступ с использованием точечного синтаксиса.

Ответы [ 3 ]

3 голосов
/ 24 января 2012

Вообще говоря, если вы хотите предоставить данные, вы должны использовать свойства. Публикация переменных экземпляра в общем случае - плохая идея.

0 голосов
/ 24 января 2012

Да, потому что то, что вы делаете, когда вы делаете @property, направляет людей, использующих его, для фактического вызова методов setSomeString и someString. Даже если вы @synthesize используете их, для вашего кода лучше использовать методы, потому что вы можете изменить их, если вам нужно. Если вы просто используете указатель, если вам нужно перехватить доступ, вы не сможете.

0 голосов
/ 24 января 2012

Это более объектно-ориентированный способ сделать это, потому что при использовании свойства вы можете изменить получатель / установщик позже (вместо его синтеза), если вы хотите, чтобы оно делало что-то еще.

...