Свойство
@ создает автоматические объявления сообщений, так же как и запись
(int)thing;
(void)setThing:(int)value;
@ synthesize автоматически создает реализации, т.е.
(int)thing {
return thing;
}
(void)setThing:(int)value {
thing = value;
}
Если вы сами дадите определение, оно переопределит @synthesized версию. Поэтому, пока вы правильно называете метод, он будет работать с или без @synthesize.
Точечная запись работает как с синтезированными, так и с пользовательскими реализациями методов.