Когда вы @synthesize
свойство, которое не имеет связанного с ним ивара (говорите ли вы @synthesize property
или @synthesize property=_property
), для вас генерируется ивар. По умолчанию используется то же имя для ivar, что и для самого свойства. Если это свойство retain
, тогда вам нужно release
объект в -dealloc
, иначе у вас будет утечка памяти.
Соглашение Apple состоит в том, чтобы называть ivars (независимо от того, объявлено ли оно явно в интерфейсе или неявно в @synthesize
) с подчеркиванием, указывающим на закрытую природу ivar. ИМО также полезно обеспечить, чтобы люди использовали ивар только тогда, когда они намеревались (поскольку для некоторых кодировщиков, кажется, легко случайно набрать myproperty
, когда вы имеете в виду self.myproperty
, что может привести к значительным ошибкам).
Ответ на ваш последний вопрос в основном да, хотя технически ответ «иногда». Вы должны освободить объект только в том случае, если в иваре был сохранен объект. Это большую часть времени. Тем не менее, свойства - это просто ярлык для вызова методов с именами «myproperty» и «setMyproperty» (и т. Д.), Поэтому возможно иметь пару методов с этими именами и связанное свойство, у которого фактически нет ивара в паре с ним. Но если вы объявляете свойства с атрибутом retain
и синтезируете их, вы всегда должны освобождать объекты, на которые указывают их ивары.