[objective-c] BOOL 속성 사용

Apple은 다음과 같이 BOOL 속성을 선언 할 것을 권장합니다.

@property (nonatomic, assign, getter=isWorking) BOOL working;

Objective-C 2.0 속성과 점 표기법을 사용하면서 self.working. 나도 사용할 수 있다는 것을 압니다. [self isWorking]하지만 그럴 필요는 없습니다.

그래서 어디서나 점 표기법을 사용하고 있는데 왜 추가 속성을 정의해야합니까? 간단히 써도 될까요

@property (nonatomic, assign) BOOL working;

아니면 getter=isWorking제 경우에 쓸 수있는 혜택이 있습니까 (점 표기법 사용)?

감사!



답변

Apple은 단순히 isX문체 목적으로 getter를 선언 할 것을 권장 합니다. 점 표기법이나 올바른 이름의 메시지 표기법을 사용하는 한 게터 이름을 사용자 정의하는지 여부는 중요하지 않습니다. 점 표기법을 사용하려는 경우 차이가 없지만 속성 이름으로 액세스 할 수 있습니다.

@property (nonatomic, assign) BOOL working;

[self setWorking:YES];         // Or self.working = YES;
BOOL working = [self working]; // Or = self.working;

또는

@property (nonatomic, assign, getter=isWorking) BOOL working;

[self setWorking:YES];           // Or self.working = YES;, same as above
BOOL working = [self isWorking]; // Or = self.working;, also same as above


답변

Apple은 문체 목적으로 권장합니다.이 코드를 작성하는 경우 :

@property (nonatomic,assign) BOOL working;

그러면 [object isWorking]을 사용할 수 없습니다.
오류가 표시됩니다. 그러나 아래 코드를 사용하면

@property (assign,getter=isWorking) BOOL working;

따라서 [object isWorking]을 사용할 수 있습니다.


답변

기본 유형과 함께 속성을 사용하는 것은 이점이 없습니다. @property할당 된 힙에 사용되는 NSObjects것처럼 NSString*, NSNumber*, UIButton*메모리 관리 접근이 무료로 만들어지기 때문에, 등. 를 만들 때 BOOL값은 항상 스택에 할당되며 메모리 누수를 방지하기 위해 특별한 접근자가 필요하지 않습니다. isWorking부울 값의 상태를 표현하는 인기있는 방법입니다.

다른 OO 언어에서는 변수 private bool working;와 두 개의 접근 SetWorking자를 만들 것입니다 : setter와 IsWorkingaccessor를 위해.


답변