On the Adopting Modern Objective-C guide, Apple recommends using the NS_ENUM macro instead of enum. I\'ve also read an explanation from NSHipster about NS_ENUM and NS_OPTIONS.>
NS_ENUM allows you to define a type. This means that the compiler can check if you're assigning the enum to a different variable like so:
//OK in both cases
NSInteger integer = SizeWidth;
//OK only with typedef
BOOL value = SizeHeight;
NS_ENUM also provides checks in switch statements that you've covered all possible values:
//Will generate warning if using NS_ENUM
switch(sizeVariable) {
case SizeWidth:
//Do something
}