«Вы также получаете возможность освободить объект»
Да, если вы не объявили это с атрибутом assign
.
Как вы, вероятно, знаете, одна из причин (хотя, возможно, и не основная) использования объявленных свойств заключается в том, что вы можете сделать:
self.moon = aMoon;
вместо;
[self setMoon:aMoon];
Они эквивалентны. Это означает, что ваше освобождение может выглядеть так:
self.moon = nil; // Releases and sets to nil
Но не забывайте никогда не делать:
moon = nil; // Sets to nil, doesn't release
Это очень хорошая практика, чтобы не только освободить объект, но и установить для переменной значение nil, как вы делаете, потому что в противном случае другой код мог бы по ошибке попытаться использовать указатель, оставленный в переменной.