One downside to our “fool-proofing” is that it complicates potential subclassing since an instance of a child class can no longer call [super alloc] as we have in our -hiddenAlloc method. Also [[self class] hiddenAlloc] would fail if called by a child class instance unless the child class also implemented -hiddenAlloc.