After [super dealloc]
the instance is garbage and whatever happens is rather random and non-deterministic. As @bneely wrote, [super dealloc]
must be last.
Best practice: convert to ARC.
As for retainCount
, there are no guarantees what it's value may be, don't use it, it just caused confusion. In your case you destroyed the class instance by calling [super dealloc]
and then expect the instance to behave as if it still exists. It can't, it has been destroyed and is now just some non-deterministic bits in memory.