In general, we use the C-style enum keyword to define enumeration types.
[CPP]View Plaincopy
- enum{
- Uiviewanimationtransitionnone,
- Uiviewanimationtransitionflipfromleft,
- Uiviewanimationtransitionflipfromright,
- Uiviewanimationtransitioncurlup,
- Uiviewanimationtransitioncurldown,
- } uiviewanimationtransition;
[CPP]View Plaincopy
- Displacement Operation Enumeration Definition
- enum {
- Uiviewautoresizingnone = 0,
- Uiviewautoresizingflexibleleftmargin = 1 << 0,
- Uiviewautoresizingflexiblewidth = 1 << 1,
- Uiviewautoresizingflexiblerightmargin = 1 << 2,
- Uiviewautoresizingflexibletopmargin = 1 << 3,
- Uiviewautoresizingflexibleheight = 1 << 4,
- Uiviewautoresizingflexiblebottommargin = 1 << 5
- };
- typedef Nsuinteger Uiviewautoresizing; //Use Nsuinteger where you can use uiviewautoresizing,//uiviewautoresizing equivalent to an alias of Nsuinteger.
- So a uiviewautoresizing variable can be assigned directly to Nsuinteger.
An enumeration value is typically an int value of 4 bytes, which is 8 bytes on a 64-bit system.
After IOS6 and Mac OS 10.8, Apple introduced two macros to redefine the two enum types, essentially combining the enum definition with a typedef and using different macros to differentiate from the code perspective.
Ns_options is generally used to define the enumeration values of displacement-related operations, we can refer to the Uikit.framework header file, you can see a large number of enumeration definitions.
[CPP]View Plaincopy
- typedef ns_enum (Nsinteger, uiviewanimationtransition) {
- Uiviewanimationtransitionnone,//default starting from 0
- Uiviewanimationtransitionflipfromleft,
- Uiviewanimationtransitionflipfromright,
- Uiviewanimationtransitioncurlup,
- Uiviewanimationtransitioncurldown,
- };
- typedef ns_options (Nsuinteger, uiviewautoresizing) {
- Uiviewautoresizingnone = 0,
- Uiviewautoresizingflexibleleftmargin = 1 << 0,
- Uiviewautoresizingflexiblewidth = 1 << 1,
- Uiviewautoresizingflexiblerightmargin = 1 << 2,
- Uiviewautoresizingflexibletopmargin = 1 << 3,
- Uiviewautoresizingflexibleheight = 1 << 4,
- Uiviewautoresizingflexiblebottommargin = 1 << 5
- };
The two macros are defined in Foundation.framework's NSObjCRuntime.h:
[CPP]View Plaincopy < param name= "wmode" value= "Transparent" >
- #if (__cplusplus && __cplusplus >= 201103L && (__has_extension (cxx_strong_enums) | | __has_feature ( objc_fixed_enum))) | | (!__cplusplus && __has_feature (objc_fixed_enum))
- #define NS_ENUM (_type, _name) ENUM _name: _type _name; Enum _name: _type
- #if (__cplusplus)
- #define Ns_options (_type, _name) _type _name; Enum: _type
- #else
- #define Ns_options (_type, _name) enum _name: _type _name; Enum _name: _type
- #endif
- #else
- #define NS_ENUM (_type, _name) _type _name; Enum
- #define Ns_options (_type, _name) _type _name; Enum
- #endif
Will
[CPP]View Plaincopy
- typedef ns_enum (Nsinteger, uiviewanimationtransition) {
Expand to get:
[CPP]View Plaincopy < param name= "wmode" value= "Transparent" >
- typedef enum Uiviewanimationtransition:nsinteger uiviewanimationtransition;
- Enum Uiviewanimationtransition:nsinteger {
From the enumeration definition, the essence of Ns_enum and Ns_options is the same, just literally distinguishing its use. Ns_enum is a general case, ns_options is generally used to define situations with displacement operations or characteristics (bitmask).
When actually used, you can define directly:
[CPP]View Plaincopy
- typedef Enum:nsinteger {...} Uiviewanimationtransition;
is equivalent to the definition above.
Reference Documentation:
1. http://nshipster.com/ns_enum-ns_options/
2.http://iamthewalr.us/blog/2012/11/ns_enum-and-ns_options/
IOS: Enumeration Type Enum,ns_enum,ns_options