self.object = nil
вызывает ваш установщик, который освобождает старое значение, устанавливает член на nil
и, возможно, выполняет другие действия (это метод, поэтому он может делать все что угодно). «Все» часть этого потенциально опасна; см. этот вопрос , например.
[object release]
освобождает старое значение, но оставляет член в виде теперь висящего указателя, что является хорошим рецептом для ошибок. В dealloc
это на самом деле не имеет значения, поскольку сам указатель тоже собирается исчезнуть, но в любом другом случае очень плохая идея освободить элемент, не устанавливая его в nil
.
(Как примечание, вы никогда не должны предполагать, что освобождение объекта дает ему счетчик ссылок 0. Он освобождает вашу ссылку, но другие объекты могут иметь ссылки на него.)