结肠是如何与伊娃一起使用的?

时间:2014-11-07 01:20:36

标签: ios objective-c

我正在进行一些代码重构,并且我遇到了一些我之前从未见过的ivars语法。代码看起来像

@interface Object : NSObject {
@private BOOL aBool:1;
}
@end

我的问题是,:1做了什么?

1 个答案:

答案 0 :(得分:6)

这种语法与ivar在结构中的含义相同;您正在声明指定大小的位域。

在这种情况下,这可能不会对班级的实际大小产生任何影响 - 我不认为你可以分配不到一个字节 - 但编译器会警告你,如果你尝试将值放入变量中,该变量对于您指定的位域大小来说太大了:

@interface BittyBoop : NSObject
{
    unsigned char bit:1;
    unsigned char bits:4;
}

@end

@implementation BittyBoop

- (void)doThatThingIDo
{
    bit = 2;    // Implicit truncation from 'int' to bitfield changes value from 2 to 0
    bits = 2;   // no warning
}

@end