Есть ли разница между установкой свойства с помощью точки или синтаксиса скобок? - PullRequest
4 голосов
/ 05 февраля 2010

Учитывая объявление свойства ниже, работает ли метод (A) точно так же, как метод (B)? Я просто хочу проверить, что self.yellowViewController = yellcon_New; проходит через мой установщик, чтобы старые объекты освобождались, а новые сохранялись.

// INTERFACE
@property(nonatomic, retain) YellowViewController *yellowViewController;

// IMPLEMENTATION (A)
self.yellowViewController = yellcon_New;

// IMPLEMENTATION (B)
[self setYellowViewController:yellcon_New];

Ответы [ 3 ]

5 голосов
/ 05 февраля 2010

Все это правильно:

self.yellowViewController = yellcon_New;

А

[self setYellowViewController:yellcon_New];

Работай так же. Я хотел бы добавить кое-что интересное: когда вы используете

yellowViewController = yellcon_New;

Вы напрямую связываете значение с ivar, не проходя через ваш метод установки.

Так что, если у вас есть

-(void)setYellowViewController:(YellowViewController*)theYellowViewController;
{
    NSLog(@"Setting the yellow view controller");
    [yourWife askFor:beer];
    ...whatever...
    ...set the yellowViewController (retain in your case)
}

Calling

self.yellowViewController = yellcon_New;

и

[self setYellowViewController:yellcon_New];

будет использовать метод setter (и зарегистрирует сообщение, и ваша жена принесет вам немного пива)

но

yellowViewController = yellcon_New;

не будет.

Интересно знать это в некоторых случаях.

4 голосов
/ 05 февраля 2010

Да, линии A и B работают одинаково

Вы можете проверить это, используя @dynamic вместо @synthesize для этого свойства и поместив сообщение NSLog в вашу реализацию метода установки.

1 голос
/ 05 февраля 2010

Да. Если вы используете @synthesize для этого свойства, он создает метод -setYellowViewController: для вас.

...