Generally, you will want to use proper constants as Caleb has explained (+1).
However, it can (at times) be useful to wrap those constants in class methods:
@interface MONColor : NSObject
+ (NSString *)colorName;
@end
@interface MONRedColor : MONColor
@end
MONRedColor.m
NSString * const MONColorName_Red = @"Red";
@implementation MONRedColor
+ (NSString *)colorName
{
return MONColorName_Red;
}
@end
In some cases, it will be smart associate a class with its constants via its interface.
This can also be useful if strings are built (or not) in different ways, or there is additional logic to perform (e.g. enabled features or composition of URLs) -- depending on the class you are dealing with.
Passing around an object and selector can be easier when dealing with some interfaces, compared to functions or arbitrary instances (constant instances) which are composed using different means.
A well chosen prefix on the C symbol is ideal for most uses.
So expanding on this, you could declare:
@interface MONResourceDirectoryName : NSObject
+ (NSString *)Archive;
+ (NSString *)Departments;
+ (NSString *)Forms;
+ (NSString *)GoalTracking;
+ (NSString *)Roles;
+ (NSString *)HomeWork;
+ (NSString *)Postings;
+ (NSString *)SignUp;
+ (NSString *)System;
+ (NSString *)Portfolio;
+ (NSString *)Definitions;
@end
then write:
NSString * resourceDirectory = [MONResourceDirectoryName Forms];
You can also use C structs for grouping data. I'll demonstrate using CFString
s (which are NSString
s), in case you need an option which is ARC-compatible:
struct t_mon_resource_directory_name {
CFStringRef const Archive;
CFStringRef const Departments;
CFStringRef const Forms;
CFStringRef const GoalTracking;
CFStringRef const Roles;
CFStringRef const HomeWork;
CFStringRef const Postings;
CFStringRef const SignUp;
CFStringRef const System;
CFStringRef const Portfolio;
CFStringRef const Definitions;
};
extern const struct t_mon_resource_directory_name MONResourceDirectoryName;
const struct t_mon_resource_directory_name MONResourceDirectoryName = {
.Archive = CFSTR("Archive"),
.Departments = CFSTR("Departments"),
.Forms = CFSTR("Forms"),
.GoalTracking = CFSTR("GoalTracking"),
.Roles = CFSTR("Roles"),
.HomeWork = CFSTR("HomeWork"),
.Postings = CFSTR("Postings"),
.SignUp = CFSTR("SignUp"),
.System = CFSTR("System"),
.Portfolio = CFSTR("Portfolio"),
.Definitions = CFSTR("Definitions")
};