Objective-c枚举最大(按位)限制(iphone)

时间:2011-11-16 15:35:13

标签: iphone objective-c enums bit-manipulation

我有一个可以对作为枚举定义的Web服务进行调用的列表

typedef enum
{
    ServiceCallGetDataA = 1 << 1;
    ServiceCallGetDataB = 1 << 2;
    ServiceCallGetDataC = 1 << 3;
    ServiceCallGetDataD = 1 << 4;
    ..
} ServiceCall;

这是按位完成的,所以如果我打电话给我的服务经理,我可以说

[ServiceManager getDataFor:( ServiceCallGetDataB | ServiceCallGetDataC )];
然后,它给了我B&amp; B的两个数据。 C服务。这一切都很完美。

但我只能定义32个枚举,因为我正在开发的iOS平台是32位。

主要目标是保持OR操作不变,以便使用OR操作获取/设置枚举。

任何想法?

2 个答案:

答案 0 :(得分:1)

您也可以尝试使用位向量而不是普通枚举。正如我发布this question时所建议的那样,您可以使用CFMutableBitVector来实现任意大小的位向量。

答案 1 :(得分:0)

如果你需要更大的整数,你可以使用long long类型,即使在iOS上也应该转换成64位整数。

或者,您可以为每个服务使用具有常量字符串的NSSet变量。然后你可以将它们组合起来,检查对象是否被包含等等。如果速度很关键,这可能不是选项,但如果不经常使用这些功能,你就会有更大的灵活性。