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