В том случае, если вы определили приложение в свойствах log4j и хотите его программно обновить, задайте имя в свойствах log4j и получите его по имени.
Вот пример записи log4j.properties :
log4j.appender.stdout.Name=console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.Threshold=INFO
Чтобы обновить его, выполните следующие действия:
((ConsoleAppender) Logger.getRootLogger().getAppender("console")).setThreshold(Level.DEBUG);
При представлении модального контроллера представления сохраняется контроллер 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, а также в иерархии представлений. Отклонение его уравновесит их.
Итак, суть в том, что сохраните его, если вы хотите контролировать его напрямую, но вам не нужно.
EDIT - Чтобы было ясно, шаблон correct всегда сохраняет объект, если вы устанавливаете себя в качестве его делегата. Это потому, что вы должны установить делегата на ноль в вашем dealloc для безопасности. Практически, однако, модальный контроллер всегда будет уволен до того, как вы оформите сделку, поэтому это не проблема. Вы заметите, что Apple также нарушает это правило в [UIView setAnimationDelegate:], которое фактически сохраняет заданный вами делегат.