Насколько это сложно, правда? Это всего лишь небольшой синтаксис, который позволяет вам указать ивар, который вы хотите использовать для поддержки свойства, для которого вы указываете компилятору создавать средства доступа. Если бы они не предоставили это или что-то подобное, вам всегда нужно, чтобы имена ваших свойств совпадали с вашими именами ivar, и есть причины, по которым вы можете этого не хотеть.
Если вам не нужно называть свои ивары по-другому, вам не нужно беспокоиться об указании имени ивара. На самом деле вам вообще не нужно создавать ivars для ваших свойств ... если вы этого не сделаете, компилятор создаст их для вас.
Обновление: По состоянию на середину 2013 года LLVM по умолчанию синтезирует средства доступа для свойств, поэтому в большинстве случаев вам больше не нужно указывать @synthesize
вообще. Единственный случай, когда вы все равно будете его использовать, - это когда вы хотите сохранить свойство с переменной экземпляра, отличной от той, которую сгенерирует для вас компилятор. Кроме того, именем по умолчанию для ивара, поддерживающего свойство, будет имя свойства с префиксом подчеркивания. Таким образом, код в примере OP можно упростить, удалив строки:
id _delegate;
и
@synthesize delegate=_delegate;
Я удалил свой предыдущий совет против использования префикса подчеркивания, поскольку он явно не согласен с текущей модой и поведением компилятора по умолчанию. Однако, насколько я знаю, все еще плохо использовать префикс подчеркивания для имен ваших методов.
Кроме того, до меня дошло, что, по крайней мере, один человек интерпретировал первую строку моего ответа: «Насколько это сложно, правда?» как снисходительный. Я надеюсь, что это было впечатление только одного человека - я определенно не намеревался снисходиться, а только пытался сформулировать свой ответ вокруг утверждения ОП, что директива @synthesize xxx=_xxx;
усложняет ситуацию. Есть много, чтобы поглотить, когда вы начинаете; надеюсь, что новое поведение «синтезировать по умолчанию» уменьшит нагрузку для новичков.