Вы можете ссылаться на свойство @synthesized
как instanceVariableName
или self.propertyName
.Два имени могут быть одинаковыми или разными.
Когда вы ссылаетесь как instanceVariableName
и изменяете значение, никакая логика сохранения / копирования связанного свойства не применяется - вы просто ссылаетесь на«сырая» переменная.Когда вы ссылаетесь на self.propertyName
, применяется логика сохранения / копирования , и, например, если свойство объявлено как «сохранить», то старое значение будет освобождено, а новоесохраняемое значение.
При назначении уже сохраненному значению (например, от alloc / init) свойству проще (если это инициализация, где свойство ранее было nil
), присвоить instanceVariableName
и пропустите необходимость release
значения (так что чистое число retains
будет 1 в конце операции).Но при присваивании свойству значения, отличного от retained
(отличного от autoreleased
retain
), вы хотите, чтобы свойство имело значение retain
, поэтому вы должны использовать нотацию self.propertyName
.
Использование начального "_" для переменной экземпляра, которая также является свойством, является простым соглашением, позволяющим разделить эти два элемента и избежать случайной ссылки на одну (путем ошибочного добавления / удаления self
), когда вы имели в виду другую.