Важно понимать, что делает каждая из этих строк кода.Они не все одинаковы и они не обязательно избыточны.Одна вещь, которая поможет, это использовать правильную терминологию - например, с NSObject *myObject;
вы, вероятно, ссылаетесь на объявление переменной экземпляра.
Прежде всего, объявление @property
в @interface
позволяет вам сказать, что экземпляры класса представляют часть состояния.В нем ничего не говорится о реализации этого состояния, только о том, что оно предоставляется экземплярами вашего класса и контрактом API (управление памятью, атомарность, методы) для этого состояния.
Директива @synthesize
указывает компилятору создать или использовать конкретную переменную экземпляра в качестве хранилища для объявленного @property
. Это не обязательно должно быть то, как вы предоставляете хранилище для свойства. Например, Core Data предоставляет свое собственное хранилище для смоделированных свойств, поэтому вместо них вы используете @dynamic
.Вам также не нужно использовать переменную экземпляра с тем же именем, что и у вашего @property
- чтобы расширить ваш пример выше, вы можете назвать свою переменную экземпляра myObject_
, указав в свойстве object
, и это совершенно нормально.*
Наконец, вы отправляете переменную экземпляра -release
in -dealloc
- для свойства типа объекта, помеченного retain
или copy
- потому что вы сказали, что будете управлять его памятью.Вы не освобождаете свойство , вы освобождаете хранилище .Если бы вы реализовали хранилище другим способом, вы бы очистили его другим способом.