2014-11-07 2 views
4

일부 코드 리팩터링을 수행하고 있으며 이전에 보지 못했던 일부 ivars 구문을 발견했습니다. 코드는 다음과 같습니다.ivars와 콜론은 어떻게 사용됩니까?

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

제 질문은 :1은 무엇입니까?

+0

본 적이 없습니다. 알고 싶다. – uchuugaka

답변

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 
+0

NO 또는 YES (0 또는 1)가있는 BOOL의 경우이 모든 : 1은 아무 작업도 수행하지 않습니까? – Gil

+0

일반적으로 'BOOL'의 8 비트를 다룰 수 있기 때문에 아무 것도하지 않습니다 (typedef'd'unsigned char'). 이것은 [BOOL의 날카로운 모퉁이] (http://www.bignerdranch.com/blog/bools-sharp-corners/)의 일부를 피하려는 시도 일 수 있습니다. –

관련 문제