Constants in Objective-C Constants in Objective-C ios ios

Constants in Objective-C


You should create a header file like

// Constants.hFOUNDATION_EXPORT NSString *const MyFirstConstant;FOUNDATION_EXPORT NSString *const MySecondConstant;//etc.

(you can use extern instead of FOUNDATION_EXPORT if your code will not be used in mixed C/C++ environments or on other platforms)

You can include this file in each file that uses the constants or in the pre-compiled header for the project.

You define these constants in a .m file like

// Constants.mNSString *const MyFirstConstant = @"FirstConstant";NSString *const MySecondConstant = @"SecondConstant";

Constants.m should be added to your application/framework's target so that it is linked in to the final product.

The advantage of using string constants instead of #define'd constants is that you can test for equality using pointer comparison (stringInstance == MyFirstConstant) which is much faster than string comparison ([stringInstance isEqualToString:MyFirstConstant]) (and easier to read, IMO).


Easiest way:

// Prefs.h#define PREFS_MY_CONSTANT @"prefs_my_constant"

Better way:

// Prefs.hextern NSString * const PREFS_MY_CONSTANT;// Prefs.mNSString * const PREFS_MY_CONSTANT = @"prefs_my_constant";

One benefit of the second is that changing the value of a constant does not cause a rebuild of your entire program.


There is also one thing to mention. If you need a non global constant, you should use static keyword.

Example

// In your *.m filestatic NSString * const kNSStringConst = @"const value";

Because of the static keyword, this const is not visible outside of the file.


Minor correction by @QuinnTaylor: static variables are visible within a compilation unit. Usually, this is a single .m file (as in this example), but it can bite you if you declare it in a header which is included elsewhere, since you'll get linker errors after compilation