冒号如何与ivars一起使用?
我正在做一些代码重构,我遇到了一些我以前没见过的ivars语法。代码看起来像冒号如何与ivars一起使用?
@interface Object : NSObject {
@private BOOL aBool:1;
}
@end
我的问题是,什么是:1
吗?
此语法与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
因此,对于BOOL的情况,它有NO或YES(0或1),所有这些:1什么都不做? – Gil 2014-11-08 02:42:10
不是什么都没有,因为通常你可以处理一个'BOOL'的所有8位(这是一个typedef'd'unsigned char')。这可能是为了避免['BOOL'的尖角]“(http://www.bignerdranch.com/blog/bools-sharp-corners/)。 – 2014-11-08 09:07:12
从未见过。有兴趣知道。 – uchuugaka 2014-11-07 01:25:36