2011-08-10 5 views

ответ

3

переменные не разрушаются, когда их стек стека удаляется из стека (нормальные переменные, иначе вы получите эпические утечки памяти). Смотрите их как глобальные переменные, к которым вы можете получить доступ только локально. Они останутся в живых, пока вся программа не закончится.

Пример:

+ (id)sharedInstance { 
    static singletonInstance = nil; // for example 
    if (singletonInstance == nil) { 
    singletonInstance = [[self alloc] init]; 
    } 
    return singletonInstance; 
} 
+1

Как насчет «рамки стека»? –

+0

@Rudy Velthuis, вот и все, спасибо :) –

+1

FWIW, рамка стека не «внутри {и}». Это набор локальных переменных и аргументов функции, а также адрес возврата и некоторые домашние местоположения (например, для временного хранения указателя стека и некоторых регистров). Он становится недействительным, когда возвращается из текущего функционального блока, либо явно, вызывая возврат, либо неявно, просто дойдя до конца. –

1

Область находится на файловом уровне, как и в C. А так как она статична переменная будет оставаться в течение всего срока службы приложения и все экземпляры класса будут иметь доступ к Это. Хорошими примерами будут ссылки на экземпляр singleton, реализация глобального счетчика или некоторая блокировка ресурсов.

Смежные вопросы