Ответом на вопрос № 1 является «возможно» ... если ваш контроллер представления удален из стека, и никто другой не сохранил его, тогда ваш контроллер представления должен быть освобожден. Но , (и это может быть ответом на ваш вопрос # 2) одна из ошибок, которые я сделал изначально, заключалась в том, что вы не понимали, что при вызове pushViewController: контроллер навигации сохранит ваш контроллер представления, поэтому вы недолжен.Убедитесь, что вы освобождаете свой контроллер вида после того, как создали его и поместили в стек.
MyViewController * viewController = [[MyViewController alloc] init...];
[self.navigationController pushViewController:viewController];
[viewController release];
Я полагаю, что статический анализатор предупредит вас, если вы забудете вызов разблокировки в этой ситуации ... и это одна из причин, по которой статический анализатор так хорош.
Если вы не отпустите контроллер вида в этот момент, ваш счетчик всегда будет на +1 выше, чем должен.
Я заметил, что статический анализатор НАМНОГО более полезен для этих вещей, чем инструмент для обнаружения утечек.(Который, например, не обнаружит «утечку», которая включает в себя циклические ссылки ... два просочившихся объекта, которые ссылаются на себя, не отображаются, потому что «ссылка» все еще существует для вашего объекта).
Таким образом, в настоящее время у вас есть что-то вроде ...
@interface MyClass : UIViewController
{
GKSession * gkSession;
}
...
@end
в вашей реализации, вы должны убедиться, что вы выпустили свой iVar с помощью метода dealloc:
@implementation MyClass
...
- (void)dealloc
{
[super dealloc];
if (gkSession) [gkSession release];
}
@end