Да, когда вы отправляете removeFromSuperview, впоследствии отпустите сообщение, отправленное. И каждый вызов уменьшения выпуска сохраняют счет. А в случае:
MySubView * mySubView = [[MySubView alloc] init];
[window addSubview:mySubView];
[mySubView release];
[mySubView removeFromSuperview];
результат будет таким, как вы ожидаете: после removeFromSuperview счетчик хранения mySubView станет 0, и будет вызван dealloc.
но в вашем примере за «потом, в какой-то момент позже» больше кода, а некоторый другой объект (и это не суперпредставление) сохраняет mySubView. Например, вы можете зарегистрировать значение retainCount, чтобы увидеть, где ваш вид сохранен / освобожден.