Ответ 1
Определение переменных в скобках просто объявляет их переменными экземпляра.
Объявление (и синтезация) свойства генерирует геттеры и сеттеры для переменной экземпляра в соответствии с критериями в круглой скобке. Это особенно важно в Objective-C, потому что часто с помощью геттеров и сеттеров управляется память (например, когда значение присваивается ivar, в качестве сеттера он может сохранить и в конечном итоге освободить назначенный объект). Помимо стратегии управления памятью, практика также способствует инкапсуляции и уменьшает количество тривиального кода, который в противном случае потребовался бы.
Очень часто объявляется ivar в скобках, а затем ассоциированное свойство (как в вашем примере), но это не является строго необходимым. Определение свойства и синтезирования - это все, что требуется, потому что синтез свойства неявно также создает ivar.
Подход, предлагаемый Apple (в шаблонах):
Определить свойство в файле заголовка, например:
@property (assign, readonly) gameCenter;
Затем синтезируйте и объявите ivar в реализации:
@synthesize gameCenter = __gameCenter;
Последняя строка синтезирует свойство gameCenter
и утверждает, что любое значение, присвоенное свойству, будет сохранено в __gameCenter
ivar. Опять же, это необязательно, но, определив ivar рядом с синтезатором, вы сокращаете места, где вы должны набирать имя ivar, но все еще явно называя его.