ios - Constants in Objective-C

ID : 1385

viewed : 190

Tags : iosobjective-ccocoansstringconstantsios

Top 5 Answer for ios - Constants in Objective-C

vote vote


You should create a header file like

// Constants.h FOUNDATION_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.m NSString *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).

vote vote


Easiest way:

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

Better way:

// Prefs.h extern NSString * const PREFS_MY_CONSTANT;  // Prefs.m NSString * 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.

vote vote


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


// In your *.m file static 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

vote vote


The accepted (and correct) answer says that "you can include this [Constants.h] file... in the pre-compiled header for the project."

As a novice, I had difficulty doing this without further explanation -- here's how: In your YourAppNameHere-Prefix.pch file (this is the default name for the precompiled header in Xcode), import your Constants.h inside the #ifdef __OBJC__ block.

#ifdef __OBJC__   #import <UIKit/UIKit.h>   #import <Foundation/Foundation.h>   #import "Constants.h" #endif 

Also note that the Constants.h and Constants.m files should contain absolutely nothing else in them except what is described in the accepted answer. (No interface or implementation).

vote vote


I am generally using the way posted by Barry Wark and Rahul Gupta.

Although, I do not like repeating the same words in both .h and .m file. Note, that in the following example the line is almost identical in both files:

// file.h extern NSString* const MyConst;  //file.m NSString* const MyConst = @"Lorem ipsum"; 

Therefore, what I like to do is to use some C preprocessor machinery. Let me explain through the example.

I have a header file which defines the macro STR_CONST(name, value):

// StringConsts.h #ifdef SYNTHESIZE_CONSTS # define STR_CONST(name, value) NSString* const name = @ value #else # define STR_CONST(name, value) extern NSString* const name #endif 

The in my .h/.m pair where I want to define the constant I do the following:

// myfile.h #import <StringConsts.h>  STR_CONST(MyConst, "Lorem Ipsum"); STR_CONST(MyOtherConst, "Hello world");  // myfile.m #define SYNTHESIZE_CONSTS #import "myfile.h" 

et voila, I have all the information about the constants in .h file only.

Top 3 video Explaining ios - Constants in Objective-C