Авто-релиз никогда не гарантирует, когда будет вызван dealloc, и вы не должны на это полагаться.
И пулы авто-релиза должны использоваться для потоков или когда у вас большой объем памяти в замкнутом цикле.Его не следует использовать в главном потоке, который уже выполняется в отдельном пуле.
Вероятно, вам следует переместить вызов таймера недействительности в viewDidUnload или viewWillDisappear в классе OTNetwork.
Надеюсь, это поможет.
[Обновление: 02 марта 2012 г.]
Если вы хотите убедиться, что вызывается dealloc, попробуйте следующее
1) Сохраните ссылку на контроллер OTNetwork
OTNetwork *net = [[OTNetwork alloc] initWithNibName: @"OTNetwork" bundle: nil];
net.delegate = self;
self.modalV = net; // @property (nonatomic, strong) OTNetwork *modalV;
[net release];
[self presentModalViewController: modalV animated: YES];
2) Определить протокол / делегат в OTNetwork для отчета о его закрытии
// .h
@protocol OTNetworkDelegate;
- (void) netViewClosed;
@end
// .m
- (void) viewDidUnload
{
[self.delegate netViewClosed];
}
3) В mainViewController реализовать протокол
- (void) netViewClosed
{
if(modalV)
{
[modalV release], modalV = nil;
}
}