Краткий ответ на ваш вопрос: «когда программа выходит».
Статические переменные выделяются в самом начале вашей программы, до начала функции main()
. Точно так же они будут освобождены в самом конце вашей программы, вскоре после выхода main()
. Это управление памятью обрабатывается средой выполнения Objective-C, и все это происходит за кулисами.
Если вы пытаетесь отслеживать это поведение, вам, вероятно, не повезет. Например, если вы сделали следующее в пользовательском классе, а затем использовали этот класс как статический член другого класса:
- (void)dealloc
{
NSLog(@"I am being deallocated");
[super dealloc];
}
Вы никогда не увидите это сообщение в журнале. На это есть несколько причин. Во-первых, переменные, которые требуются NSLog()
, возможно, уже были освобождены как часть обычной процедуры завершения работы. Во-вторых, потому что исполняющая система может просто освободить всю оставшуюся память за один раз, не утруждая себя вызовом dealloc
методов.
Это может быть проблематично, если ваш пользовательский класс делает что-то важное в своем методе dealloc
. Если это так, рассмотрите возможность написания собственного метода cleanup
, который вы вызываете для этих объектов непосредственно перед выходом из программы.
person
e.James
schedule
19.03.2009