Поскольку
self.anObject = nil
равно
[anObject release];
anObject=nil;
Это неверно и является источником вашего замешательства.
self.anObject = nil
не НЕ переводится в прямой доступ к ивару. Вместо этого оно становится
[self setAnObject:nil];
И поскольку вы переопределили метод -setAnObject:
, чтобы ничего не делать, базовая переменная экземпляра никогда не освобождается, и, таким образом, вы теряете память.
Между прочим, это точно , поэтому вам следует избегать использования методов установки внутри ваших методов init
и dealloc
. Подклассы могут переопределять их, чтобы делать нестандартные вещи.