See Also
Variables in Objective-C
Welcome back to Objective-C Tuesdays after a long hiatus. Picking up from where we left off, today we'll look at Variables in Objective-C
static variables declared at function scope.Normal local variables are declared inside the body of a function:
int countCharInString(char c, char const *s) {
int count = 0; // plain old local variable
do {
if (*s == c) ++count;
} while (*s++);
return count;
// after we return, count ceases to exist
}
Plain old local variables exist only for the time that the function is executing. When the function returns, local variables vanish.Sometimes you want to keep a value around between calls to a function. Typically you use a global variable for this, but if the variable is only ever used inside a single function, you can use a
static variable declared inside the function instead. One common use for this is to automatically initialize a singleton object or data structure before its first use. For example:// static variable declared in a function
NSArray *getDaysOfTheWeek() {
static NSArray *daysOfTheWeek = nil;
if ( ! daysOfTheWeek) {
daysOfTheWeek = [[NSArray alloc] initWithObjects:@"Sunday",
@"Monday", @"Tuesday", @"Wednesday",
@"Thursday", @"Friday", @"Saturday", nil];
}
return daysOfTheWeek;
}
The static variable daysOfTheWeek is actually a global variable and follows the same rules as global variables with one difference: it's only visible inside the getDaysOfTheWeek() function. This makes it seem like some magical kind of local variable that keeps its value between function calls, but in fact, you can rewrite getDaysOfTheWeek() to use a normal static global like this:// same function using a static global variable instead
static NSArray *daysOfTheWeek = nil;
NSArray *getDaysOfTheWeek() {
if ( ! daysOfTheWeek) {
daysOfTheWeek = [[NSArray alloc] initWithObjects:@"Sunday",
@"Monday", @"Tuesday", @"Wednesday",
@"Thursday", @"Friday", @"Saturday", nil];
}
return daysOfTheWeek;
}
There are only a couple of minor advantages to using a static variable declared in a function rather than a normal global:- the
staticvariable lives near the code that uses it - global variable name clashes are avoided
Next time, we'll take a look at local variables and function parameters.

































