我正在进行一些代码重构,并且我遇到了一些我之前从未见过的ivars语法。代码看起来像
@interface Object : NSObject {
@private BOOL aBool:1;
}
@end
我的问题是,: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