일부 코드 리팩터링을 수행하고 있으며 이전에 보지 못했던 일부 ivars 구문을 발견했습니다. 코드는 다음과 같습니다.ivars와 콜론은 어떻게 사용됩니까?
@interface Object : NSObject {
@private BOOL aBool:1;
}
@end
제 질문은 :1
은 무엇입니까?
일부 코드 리팩터링을 수행하고 있으며 이전에 보지 못했던 일부 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
NO 또는 YES (0 또는 1)가있는 BOOL의 경우이 모든 : 1은 아무 작업도 수행하지 않습니까? – Gil
일반적으로 'BOOL'의 8 비트를 다룰 수 있기 때문에 아무 것도하지 않습니다 (typedef'd'unsigned char'). 이것은 [BOOL의 날카로운 모퉁이] (http://www.bignerdranch.com/blog/bools-sharp-corners/)의 일부를 피하려는 시도 일 수 있습니다. –
본 적이 없습니다. 알고 싶다. – uchuugaka