BOOL 속성 사용


111

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

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

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

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

@property (nonatomic, assign) BOOL working;

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

감사!


4
의미 기반 권장 사항이 아닙니까? 따라서 myCar.isWorking은 myCar.working보다 의미 상 더 정확할 것입니다.
justcompile

답변:


206

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

4
단순히 문체 목적보다 키 값 코딩을 준수하는 것이 더 중요합니까?
Jasarien

5
Apple이 이러한 getter를 선언 하도록 권장isX 했지만 Xcode가 자동 완성 팝업에 나열 할 수 없다는 것은 조금 이상합니다 . (내 예에서) working는 거기에 나열되어 있지만 isWorking그렇지 않습니다. 따라서 BOOL 게터를 선언 할 때 어떤 이점도 보이지 않습니다. 나는 그것들을 사용하기 위해 더 많은 일을해야하지만 (게터를 선언) 더 적게 얻는다 (자동 완성 없음).
Patrick

4

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

@property (nonatomic,assign) BOOL working;

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

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

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


-26

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

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


1
당신은 그의 질문에 대답하지 않습니다. 즉, getter에 속성이 아닌 다른 이름을 명시 적으로 지정하는 목적은 무엇입니까 (그는 속성이 좋은 생각인지 묻지 않습니다). 또한 속성은 KVO 및 KVC를 허용하므로 사용자가하는 요점은 잘못된 것입니다.
Martin Gjaldbaek

기본 속성을 가진 KVO 및 KVC 사용을 간과 한 것이 맞습니다. 나는 스레드의 모든 사람들이 isWorking에 관한 그의 질문을 다루고 있다고 생각합니다. 이것은 명명 규칙입니다.
Thomson Comer

25
이것은 완전히 잘못된 것입니다. @property는 기본 유형과 함께 사용하도록되어 있으며 일관성을 위해서만 상당한 이점이 있습니다. 또한 일부 기본 유형 (일부 32 비트 CPU의 64 비트 유형 및 많은 32 비트 및 64 비트 CPU의 128 비트 유형)은 할당시 원 자성이 아닙니다. @property의 원자 성은 이러한 경우에도 유리할 수 있습니다.
bbum

1
흥미롭지 만 내가 그걸 어떻게 알 수 있겠어요? :) 이것은 atomicnonatomic속성의 함축성입니까?
Thomson Comer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.