You have, indeed, overridden dealloc here.
It’s worth noting that, as Brian says, -dealloc is not teh method that actually frees your object’s memory. It merely is a place that your object can do any last-minute cleanup prior to its actual deallocation. The method is badly named, as it leads one to think that -dealloc is actually responsible for the deallocation itself.
dealloc is confusing for an additional reason, though, and that is that sometimes when you override a method, you should call through to your superclass’ implementation of the method. Dealloc, however, is special. It’s important for the superclass’ implementation to also be called, but ARC forbids us to actually call [super dealloc] because dealloc is a forbidden message for us to send to any object on our own- ARC handles all calls to -dealloc on any object. What happens is, since we can’t call -dealloc on anything, the compiler quietly inserts a call to [super dealloc]; at the end of your own -dealloc method implementation when you build and run. You never see it there, but it’s there.
This fact causes some unease in the community, as you might guess. No one likes hidden behavior, because hidden behavior is difficult to discover for one’s self. Fortunately, it’s rare, and this is one of the rare cases.