Ios 冒号如何与IVAR一起使用?
我正在进行一些代码重构,遇到了一些我以前从未见过的ivars语法。代码看起来像Ios 冒号如何与IVAR一起使用?,ios,objective-c,Ios,Objective C,我正在进行一些代码重构,遇到了一些我以前从未见过的ivars语法。代码看起来像 @interface Object : NSObject { @private BOOL aBool:1; } @end 我的问题是,:1做什么?这种语法对ivar的意义与它在结构中的意义相同;您正在声明指定大小的位字段 在本例中,这可能不会对类的实际大小产生任何影响——我认为您不能分配少于一个字节的值——但是如果您试图在变量中输入一个对于您指定的位字段大小来说太大的值,编译器会警告您: @interface Bi
@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什么都不做?不是什么都不做,因为通常你可以处理
BOOL
的所有8位(它是一个typedef'd无符号字符
)。这可能是为了避免某些错误。