Есть ли разница между установкой свойства с помощью точки или синтаксиса в скобках?
Учитывая объявление свойства ниже, метод (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:
метод для вас.