Objective C - Static and global variable?

aryaxt picture aryaxt · Oct 19, 2010 · Viewed 12k times · Source

In my .m file for a class named Ad , I have 3 static strings

static NSString *AdStateDisabled = @"disable";
static NSString *AdStateExpired = @"expired";
static NSString *AdStateActive = @"active";

I can simply use these static variables in the current class, but i cannot call them from any other class, is there a way to make these static variables global? So for example in my viewcontroller class i can do something like.

//HomeViewController.m
if ([self.ad.state isEqual:Ad.AdStateDisabled])
{
     //do something
}

Answer

imaginaryboy picture imaginaryboy · Oct 19, 2010

You could add the following declarations to your HomeViewController.h header, which would then need to be imported anywhere you wanted access to the strings.

//HomeViewController.h
extern NSString *AdStateDisabled;
extern NSString *AdStateExpired;
extern NSString *AdStateActive;

Then alter your definitions to remove 'static'.

//HomeViewController.m
NSString *AdStateDisabled = @"disable";
NSString *AdStateExpired = @"expired";
NSString *AdStateActive = @"active";

If you don't want a user of the strings to have to import HomeViewController.h then you could also just define those strings in AdState.h and put the definitions into AdState.m (and remove them from HomeViewController.m) after which users of the string would just need to import AdState.h to use the strings.