static
переменные не уничтожаются, когда их кадр стека выталкивается из стека (обычные переменные делают, иначе вы получите эпические утечки памяти). Рассматривайте их как глобальные переменные, к которым вы можете обращаться только локально. Они останутся в живых, пока не закончится вся программа.
Пример:
+ (id)sharedInstance {
static singletonInstance = nil; // for example
if (singletonInstance == nil) {
singletonInstance = [[self alloc] init];
}
return singletonInstance;
}