Constant in Objective-C
March 2, 2011 § Leave a comment
This is a very tricky task to handle constants in Objective-C. The most suggested approach is to define global, public or private constants. This will work only if you don’t expect to put the same constant inside a loop.
In the header file
// Constants.h
extern NSString * const strConstant;
You can include this file in each file that uses the constants or in the pre-compiled header for the project.
// Constants.m
NSString * const strConstant
= @"Constant";
Constants.m should be added to your application/framework’s target to link it to product.
It is suggested that the advantage of using string constants instead of #define
‘d constants is that you can test for equality using pointer comparison (stringInstance ==
strConstant
) which is much faster than string comparison ([stringInstance isEqualToString:
strConstant
]
).
//
Constants
.h
#define MY_CONSTANT @"my_constant"
Or even better
//
Constants
.h
extern NSString * const MY_CONSTANT;
// Constants.m
NSString * const MY_CONSTANT = @"my_constant";
If you need a non global constant, you should use static keyword. Static constant is not visible outside the file.
// Constants.m static NSString * const
CONSTANT
= @"
my_constant
";
Another quick dirty way of declaring global constants is to put constant declaration into pch file instead of .h or .m files.
To declare integer instead of string in Objective-C, you will use NSInteger. This is Apple preferred way of declaring Objective-C integer.
NSInteger const counter = 0;
However if you are going to use this method to declare NSInteger and use it inside a loop, then you are in trouble.
Warning:
Assignment of read-only variable ‘counter’
If you need to use a constant inside a IF statement and iterate the constant inside a class instance or method, you would have to use static keyword.
You can add static int outside @implement.
static int counter = 0;
– (void)showTimer {
counter += 1;
}
Leave a comment