Есть ли разница между установкой свойства с помощью точки или синтаксиса в скобках?

Учитывая объявление свойства ниже, метод (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 ответа

Решение

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

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)
}

призвание

self.yellowViewController = yellcon_New;

а также

[self setYellowViewController:yellcon_New];

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

но

yellowViewController = yellcon_New;

не буду.

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

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

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

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

Другие вопросы по тегам