Objective c c、 不带标记或标识符的obj c枚举

Objective c c、 不带标记或标识符的obj c枚举,objective-c,c,ios,enums,Objective C,C,Ios,Enums,我正在学习cocos2d[iPhone上objective C的open gl wrapper],现在在玩sprites时发现了一个例子 enum { easySprite = 0x0000000a, mediumSprite = 0x0000000b, hardSprite = 0x0000000c, backButton = 0x0000000d, magneticSprite = 0x0000000e, magneticSprite2 = 0x0000000f };

我正在学习cocos2d[iPhone上objective C的open gl wrapper],现在在玩sprites时发现了一个例子

 enum {  
easySprite =   0x0000000a,
mediumSprite = 0x0000000b,
hardSprite =   0x0000000c,
backButton =   0x0000000d,
magneticSprite = 0x0000000e,
magneticSprite2 = 0x0000000f
};

因此,枚举中定义的变量用于创建的精灵对象的标记名

但我不明白

  • 为什么要为要使用的标记提供六边形值
  • 不带out标记的枚举
  • 正如我在obj C和C中所知道的那样

         typedef enum {
         JPG,
         PNG,
          GIF,
         PVR
         } kImageType;
    

    谢谢

    枚举是自动分配的值,从0开始递增,但您可以分配自己的值

    如果未指定任何值,它们将从0开始,如中所示:

    typedef enum {
     JPG,
     PNG,
     GIF,
     PVR
     } kImageType;
    
    但你可以给他们赋值:

    typedef enum {
     JPG = 0,
     PNG = 1,
     GIF = 2,
     PVR = 3
     } kImageType;
    
    甚至

    typedef enum {
     JPG = 100,
     PNG = 0x01,
     GIF = 100,
     PVR = 0xff
     } kImageType;
    
    任何您想要的,重复值也可以


    我不知道为什么会给它们指定这些特定的值,但它们可能有一些与使用相关的含义。

    通常,在创建枚举时,您希望将其用作类型(变量、方法参数等)

    在本例中,这只是一种声明整型常量的方法。因为他们不想使用枚举作为类型,所以不需要名称

    编辑: 当整数是二进制掩码时,通常使用十六进制数。您不会看到任何像+、-、*、/这样的运算符与这样的数字一起使用,您会看到按位运算符(!、&、|、^)


    十六进制数中的每一位代表4位。整数是一个32位整数,在本例中,用十六进制表示,表示只使用最后四位,其他位可以用于其他内容。从十进制数来看,这一点并不明显。

    好吧,你似乎在做一个糟糕的例子。:)

    至少就枚举而言。任何人都可以定义枚举项的实际值,但使用十六进制数没有好处,特别是用a到f(10到15)开始十六进制数没有意义。该示例也适用于此枚举:

    enum {  
    easySprite = 10,
    mediumSprite,
    hardSprite,
    backButton,
    magneticSprite,
    magneticSprite2
    };
    

    除非枚举从值10开始有什么意义,否则它可能在不指定任何具体值的情况下工作。

    这不是一个针对Objective-C的问题,因此我将其重新标记为C。它与obj C和cocos2d有关,因为这是在OBJC中创建的精灵,而不是在C文件中创建的精灵,另外,我想要一个obj C人的观点,谢谢。你在这里找到这个例子了吗?当然还有更好的Cocos2D示例可用。您好,这里是这个示例的链接,该类在这个blogAdded十六进制数字解释中的某个地方相关。GIF,您是否与其他人一样缩进?
    enum {  
    easySprite = 10,
    mediumSprite,
    hardSprite,
    backButton,
    magneticSprite,
    magneticSprite2
    };