переменные класса target-c: когда вызывается dealloc? - PullRequest
7 голосов
/ 19 марта 2009

Если я объявлю переменные класса в Objective-C, когда освободится память?

Если мой интерфейс:

@interface TestClass : NSObject
{
}

+ (NSString)instanceCount;

@end

И в реализации я заявляю:

static NSString instanceCount;

Как мне освободить эту переменную уровня класса? то есть когда в Objective-C вызывается dealloc для переменных класса?

1 Ответ

10 голосов
/ 19 марта 2009

Короткий ответ на ваш вопрос: «когда программа завершается».

Статические переменные размещаются в самом начале вашей программы, до того, как начинается функция main(). Точно так же они будут выпущены в самом конце вашей программы, вскоре после выхода main(). Это управление памятью обрабатывается средой выполнения Objective C, и все это происходит за кулисами.

Если вы пытаетесь отслеживать это поведение, вам, вероятно, не повезет. Например, если вы сделали следующее в пользовательском классе, а затем использовали этот класс в качестве статического члена другого класса:

- (void)dealloc
{
    NSLog(@"I am being deallocated");
    [super dealloc];
}

Вы бы никогда не увидели это сообщение в журнале. Есть несколько причин для этого. Во-первых, переменные, которые требуются NSLog(), возможно, уже были освобождены как часть обычной процедуры выключения. И второе, потому что система времени выполнения может просто высвободить всю оставшуюся память за один раз, не удосужившись вызвать методы dealloc.

Это может быть проблематично, если ваш пользовательский класс делает что-то важное в своем методе dealloc. Если это так, подумайте о написании пользовательского метода cleanup, который вы вызываете для этих объектов непосредственно перед выходом из программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...