In answer to the question about whether there are other options (and not speaking to the point of whether one should do this). One option is to make a class specifically as a place to keep variables that you need to have available globally. One example from this blog post
@interface VariableStore : NSObject
{
// Place any "global" variables here
}
// message from which our instance is obtained
+ (VariableStore *)sharedInstance;
@end
@implementation VariableStore
+ (VariableStore *)sharedInstance
{
// the instance of this class is stored here
static VariableStore *myInstance = nil;
// check to see if an instance already exists
if (nil == myInstance) {
myInstance = [[[self class] alloc] init];
// initialize variables here
}
// return the instance of this class
return myInstance;
}
@end
Then, from elsewhere:
[[VariableStore sharedInstance] variableName]
Of course, if you don't like the way they instantiate the singleton in the above example, you can choose your favorite pattern from here. I like the dispatch_once pattern, myself.