Представление контроллера модального представления сохраняет UIViewController. Это на самом деле не ясно из документов. Однако я проверил это, используя следующий код ...
NSLog(@"BEFORE %d", [self.setupViewController retainCount]);
[self.navigationController presentModalViewController:self.setupViewController animated:YES];
NSLog(@"AFTER %d", [self.setupViewController retainCount]);
self.setupViewController уже сохранен локально, но при его выводе выдается следующее:
2010-05-19 10:07:36.687 LocateMe[27716:207] BEFORE 1
2010-05-19 10:07:36.762 LocateMe[27716:207] AFTER 3
Таким образом, он, вероятно, сохраняется в локальном свойстве modalViewController, а также в иерархии представления. Отказ от этого уравновесит их.
Итак, суть в том, сохраните его, если хотите контролировать его напрямую, но вам это не нужно.
РЕДАКТИРОВАТЬ - Для ясности, правильный шаблон *1011* всегда должен сохранять объект, если вы устанавливаете себя в качестве его делегата. Это потому, что для безопасности вы должны установить делегата на ноль в вашем узле. Тем не менее, на практике модальный контроллер всегда будет отменен до того, как вы освободите его, так что это не проблема. Вы заметите, что Apple также нарушает это правило в [UIView setAnimationDelegate:], которое фактически сохраняет установленный вами делегат.