오류: 쓰기 가능한 원자 속성은 합성된 세터/게터와 사용자 정의 세터/게터를 쌍으로 구성할 수 없습니다.
저는 최근에 오래된 Xcode 프로젝트를 컴파일하려고 했는데(예전에는 잘 컴파일되어 있었지만), 지금은 이런 형식의 오류가 많이 발생하고 있습니다.
error: writable atomic property 'someProperty' cannot pair a synthesized setter/getter with a user defined setter/getter
이러한 오류의 원인이 되는 코드 패턴은 항상 다음과 같습니다.
// Interface:
@property (retain) NSObject * someProperty;
// Implementation:
@synthesize someProperty; // to provide the getter
- (void)setSomeProperty:(NSObject *)newValue
{
//..
}
오류가 발생하는 이유를 알 수 있습니다.컴파일러에게 내 속성 접근자(게터와 세터 모두)를 합성하라고 한 다음, 즉시 세터를 수동으로 재정의합니다.그 코드는 항상 약간 이상한 냄새가 나요.
그렇다면, 이것을 하는 적절한 방법은 무엇일까요?사용할 경우@dynamic
에 @synthesize
저도 더 좋은 글을 써야 할 것입니다.그게 유일한 방법입니까?
저도 같은 문제가 있었고 약간의 조사를 한 후, 이 문제에 대한 제 결론은 다음과 같습니다.
에 대해 합니다.@property
당신이 원자력으로 선언한 것(즉, 생략함으로써.nonatomic
키워드), 그러나 해당 속성에 대한 액세스를 동기화하는 방법에 대한 불완전한 구현을 제공합니다.
해당 경고를 사라지게 하는 방법
다음을 선언하는 경우@property
원자가 되려면 다음 중 하나를 수행합니다.
- 사용하다
@dynamic
또는; - 사용하다
@synthesize
합성된 세터와 게터를 유지합니다; - 위의 지침 중 하나를 사용하지 않고 세터와 게터를 모두 수동으로 구현합니다.
를 하면,@property
와 함께(nonatomic)
그런 다음 수동 및 합성된 게터 및 세터 구현을 혼합할 수 있습니다.
부동산 자동 합성에 관한 최신 정보
4은 LLVM 4.0이 자동 기능을 합니다.@dynamic
기본적으로, 당신이 그것을 생략하더라도.@synthesize
컴파일러는 당신에게 게터와 세터 메소드를 제공할 것입니다.그러나 원자 속성에 대한 규칙은 여전히 동일합니다.컴파일러가 getter와 setter를 모두 제공하도록 하거나 직접 구현하십시오!
당신은 또한 게터를 구현할 필요가 있습니다.예:
// Interface:
@property (retain) NSObject * someProperty;
// Implementation:
- (void)setSomeProperty:(NSObject *)newValue
{
@synchronized (self)
{
// ...
}
}
- (NSObject *)someProperty
{
NSObject *ret = nil;
@synchronized (self)
{
ret = [[someProperty retain] autorelease];
}
return ret;
}
이 질문은 "custom C 속성"을 검색하여 얻을 수 있는 다른 상위 항목 중에서 "setter =" 또는 "getter ="에 대한 정보로 업데이트되지 않습니다.
이 질문에 대한 자세한 내용은 다음과 같습니다.
@property 호출은 다음과 같이 작성하여 사용자 고유의 메서드와 함께 제공할 수 있습니다.
@property(setter = MySetterMethod:, getter = MyGetterMethod)
제공된 세터 방법에 대한 콜론을 확인합니다.
Apple 문서 참조
편집: 목표-C의 속성에 대한 새로운 변경 사항(지금은 훨씬 지능적임)이 이 질문에 대한 대답을 어떻게 변화시키는지 잘 모르겠습니다.아마도 그것은 모두 구식으로 표시되어야 할 것입니다.
OP가 설명한 이유 때문이 아니라 이 오류가 발생하는 다른 사람들도 저와 같은 문제가 있을 수 있습니다.
-() 메서드와 이름이 같은 @property가 있습니다.
이와 같은 것:
@property UIView *mainView;
-(UIView *)mainView;
언급URL : https://stackoverflow.com/questions/3227176/error-writable-atomic-property-cannot-pair-a-synthesized-setter-getter-with-a-u
'programing' 카테고리의 다른 글
Windows Azure 웹 사이트에서 SVG 사용 (0) | 2023.05.11 |
---|---|
윈도우즈 10 이하에서 개발할 도메인 이름에 대한 자체 서명 인증서를 생성하는 방법은 무엇입니까? (0) | 2023.05.11 |
exec: "gcc": 빌드로 이동할 때 %PATH%에서 실행 파일을 찾을 수 없습니다. (0) | 2023.05.11 |
셸 스크립트에서 부울 변수를 선언하고 사용하려면 어떻게 해야 합니까? (1) | 2023.05.11 |
Angular(각도)에서 수동으로 변경 감지 트리거 (0) | 2023.05.11 |