Я не понимаю, почему переменные объявлены как static
в методах класса Objective-c?Зачем объявлять переменные как статические в методе класса Objective-c?
Какова область действия переменных static
?
Я не понимаю, почему переменные объявлены как static
в методах класса Objective-c?Зачем объявлять переменные как статические в методе класса Objective-c?
Какова область действия переменных static
?
переменные не разрушаются, когда их стек стека удаляется из стека (нормальные переменные, иначе вы получите эпические утечки памяти). Смотрите их как глобальные переменные, к которым вы можете получить доступ только локально. Они останутся в живых, пока вся программа не закончится.
Пример:
+ (id)sharedInstance {
static singletonInstance = nil; // for example
if (singletonInstance == nil) {
singletonInstance = [[self alloc] init];
}
return singletonInstance;
}
Область находится на файловом уровне, как и в C. А так как она статична переменная будет оставаться в течение всего срока службы приложения и все экземпляры класса будут иметь доступ к Это. Хорошими примерами будут ссылки на экземпляр singleton, реализация глобального счетчика или некоторая блокировка ресурсов.
Как насчет «рамки стека»? –
@Rudy Velthuis, вот и все, спасибо :) –
FWIW, рамка стека не «внутри {и}». Это набор локальных переменных и аргументов функции, а также адрес возврата и некоторые домашние местоположения (например, для временного хранения указателя стека и некоторых регистров). Он становится недействительным, когда возвращается из текущего функционального блока, либо явно, вызывая возврат, либо неявно, просто дойдя до конца. –