@Synthesize 사용할 때 명시적으로 합니까?

이후, XCode 4.4 내린 것으로 알고 있는 '속성' 이 자동 생성 @synthesize 접근자에. 하지만 나는 이제 막 샘플 코드를 읽을 수 있는 것에 대해 '과' 코드 '는' 이 너태양도먼거 @synthesize 명시적으로 덧붙였다. 다음과 같습니다.

@interface RootViewController  ()

@property (nonatomic, strong) NSDateFormatter *dateFormatter;
@property (nonatomic, strong) NSUndoManager *undoManager;

@end

@implementation RootViewController
//Must explicitly synthesize this
@synthesize undoManager;

이제 나는 어찌할 바를 모르는 느낌. 내 코드를 명시적으로 '때' @synthesize 붙여야 할까?

질문에 대한 의견 (2)
해결책

39 의 질문에 대한 there& 많이유 뿐만 아니라 큰 혼란에 빠졌다. # 39, ll 시도하시겠습니까 i& 올리기 위해 일부 주문 (또는 증가되지는 we& 엉망하지, # 39, ll see.)

  1. 39 의 정지점을 let& Xcode 이야기하고 있습니다. Xcode IDE 는 . 클랭 는 컴파일러와의 . 이 기능은 호출됨 와 # 39 의 속성 오토시나시스 it& 저희에게는힘과 이야기를 나누고 있다 [ui_policytable_java_spe_policy 에서 지원되는 언어는 오브젝티브-c 확장명은 클랭] [1] 에서 사용되는 있는 기본값입니다 컴파일러와의 Xcode. &lt br>;

    그냥 할 경우, t # 39 에서 Xcode mgcc 전환하십시오 선택해제합니다 won& 이러한 기능을 활용할 수 있습니다 (상관 없이 Xcode 에서 버전). 같은 방법으로 텍스트 편집기를 사용하여 컴파일하십시오 클랭 명령줄이 에서 사용하는 경우, 당신은 것입니다.

  2. 정말 오토시나시스 don& 합성할 수 있습니다 t need to # 39, 속성 때문에 자동적으로 컴파일러에 의해 합성된 같이 명시적으로

@synthesize _propertyName propertyName =

그러나 몇 가지 예외가 존재한다.

      • 읽기쓰기로 등록 사용자 정의 및 setter 와 getter

, 모두 getter 및 setter) 는 사용자 정의 구현을 제공할 때 속성 won& # 39 에 자동으로 합성된 것이다.

      • readonlyfrom 속성을 사용자 정의 킬러.

사용자 정의 구현을 제공할 때 속성, 이 경우, t # 39 에 자동으로 합성된 won& readonlyfrom 킬러.

  • @dynamic

39 '속성' t be won& @dynamic propertyName 사용할 때, 자동으로 합성된 (이후 '와' ',' 예쁜 명백하네 @dynamic @synthesize 상호 배타적인)

@protocol 선언된 속성이 있는 -

39 를 준수하는 모든 속성, 프로토콜, 프로토콜 eventtest won& 때 자동으로 합성된 t be

선언된 특성는 범주입니다 -

이 사건은 '아니다' 가 있는 @synthesize 디렉티브을 자동으로 삽입됨 컴파일러와의 있지만, 이 때는 就不可能拥有 수동으로로 속성 중 하나. 반면 범주입니다 속성 인스턴스 변수 선언할 수 있기 때문에 될 수 없는 합성된 전혀 범주입니다 생성할 수 없습니다. # 39 완성도, I& 생각해서라도, ll, s, s # 39 that& 추가 # 39 it& 여전히 가능한 위한 가짜 속성 합성 name. domain. 오브젝티브-c 런타임용으로 개발하십시오.

      • 무시됨 속성 (새) 이후 6 점, 마크 Schl& # Xcode 에서 clang-600.0.51, 252, 프만)

정보기술 (it) 의 속성을 오버라이드합니다 수퍼 합성할 때 명시적으로 합니다

39 의 가치가 있는 것이 아님을 지적하고 합성중 it& 속성 속성, 이 경우 자동으로 백킹을 이바르 합성할 수 있으므로, 이바르 될 경우, 합성 누락되었는지 누각되었습니다 너무 명시적으로 선언했다.

마지막 3 건, 제외한 일반 철학에 관한 모든 정보를 대체하십시오 에로남이네 수동으로로 때마다 속성 (대표 구현 방법을 사용하여 모든 액세서의 @dynamic '또는') 컴파일러에서 이를 통해 전체 제어입니다 solaris. 운영까지도 오토시나시스 비활성화합니다 속성 때문이다.

이 밖에 사용하지 않는 경우 별도로, 위에서 언급한 ',' 약간만이라도 명시성 @synthesize 다른 이바르 이름을 지정할 수 있습니다. 하지만, 그래서 내 조언은 항상 flfile. 기본값입니다 명명 규칙은 중요한 것입니다.

[1]: http://clang.llvm.org/docs/LanguageExtensions.html # 목표 캜 오토시나시스 속성

해설 (6)

@Synthesize 명시적으로 사용할 수 없는 경우 '이해' 컴파일러에서 동일한 방식으로 쓴 경우 속성

@synthesize undoManager=_undoManager;

이렇게 하면 같은 코드에서 쓸 수 있습니다.

[_undoManager doSomething]; // iVar
[self.undoManager doSomethingElse]; // Use generated getter

이것은 일반적인 발생원인.

작성한 경우

@synthesize undoManager;

합니다.

[undoManager doSomething]; // iVar
[self.undoManager doSomethingElse]; // Use generated getter

내가 직접 사용 중지 ',' # 39 의 선택적입니다 it& @synthesize 이후 더 이상. 나를 위해 사용할 수 있는 단 하나의 이유는 '는' @synthesize 연결하는 이바르 '을' '@property'. 특정 setter 와 getter 생성하려면 일이다. 그러나 해당 코드를 이바르 ',' 없다 '는' 쓸모없는 @synthesize 아니라고 생각한다. 하지만 지금은 생각할 때, 새로운 질문은 ',' 이바르 &quot 사용할 수 있으며, 다른 어떤 것보다, ve I& &quot? # 39 응답 &quot never"; 이를 위해 하나!

해설 (9)
  • 언제 붙여야 할까 '' 내 코드 가능* @synthesize 명시적으로

39 의 경우 일반적으로 it& 필요합니다. 아마도 친 적이 있는 경우 it& # 39 에 필요한 것입니다.

39 의 경우 효율적인 지정값이 there& 한 말입니다.

39 라고 하고 있지만, 모두 you& 먹어서나 사용자 정의 getter 및 setter 인스턴스 변수는 스맥랜드의 백업하도록 거잖나. (Atomic 대한 속성, 이는 필요로 하는 등 간단한 사용자 정의 세터: 컴파일러에서 쓰기 getter 지정하면 단원자 속성에 대한 있지만 핵 재산이잖아 세터 아닙니다)

이러한 측면에서 볼 때:

@interface MyObject:NSObject
@property (copy) NSString *title;
@end

@implementation MyObject

- (NSString *)title {
    return _title;
}
- (void)setTitle:(NSString *)title {
    _title = [title copy];
}

@end

이 때문에 ',' _title doesn& # 39 가 작동하지 않을 수 없다. # 39, ve 지정되었습니까 you& Xcode (제대로), 또는 세터 때문에 getter 모두 doesn& 인스턴스 변수 t # 39 백킹을 만드는 일이다.

enter 이미지 여기에 설명을!

이 때문에 두 가지 방법을 사용할 수 있습니다. 변경하십시오 @implementation '이' 수 있습니다.

@implementation MyObject {
    NSString *_title;
}

- (NSString *)title {
    return _title;
}
- (void)setTitle:(NSString *)title {
    _title = [title copy];
}

@end

또는 변경하십시오 이:

@implementation MyObject

@synthesize title = _title;

- (NSString *)title {
    return _title;
}
- (void)setTitle:(NSString *)title {
    _title = [title copy];
}

@end

즉, 합성할 수 있지만 절대 필요한 실용적인 용도로 사용할 수 있습니다 * 캐비닛용입니다 정의하십시오 속성 백킹을 인스턴스 변수 you& # 39, re 제공할 때 getter / setter. 여기에 형성하는 사용할지 결정할 수 있습니다.

39 의 인스턴스 변수, 과거 I& @implementation {}, but I 've specifying 은혜를 생각하는' 는 '지금' 더 나은 선택을 라우트를 @synthesize 를 명시적으로 관계를 백킹을 변수를 절감뿐만 때문에 중복 유형과 속성:

  1. 39 의 유형, 인스턴스입니다 property& 변경하십시오 variable& # 39 의 유형 변경.

  2. 자사의 스토리지 한정자로 변경하십시오 (예를 들어, 대신 (make it 있겠느뇨 대신 강력한 또는 강한 있겠느뇨) 와 스토리지 한정자로 변경.
  3. '속성', 그리고 @synthesize 이름을 바꾸거나 제거하시겠습니까 컴파일러 오류가 생성됩니다. # 39, t end up with 너회가 won& 방황케 인스턴스 변수.

필요한 것은 알고 있는 경우, 분할 기능을 한 *-i 관련된 여러 범주 여러 파일에서. 그리고 난 # 39, 수정, 심지어 이미 이 애플 wouldn& 놀라지 않는다.

해설 (15)

만들 때 재산이잖아 확인

@property NSString *name;

Xcode 가 있는 것처럼 이바르 오토 의 합성 남겼다.

@synthesize name = _name;

즉, 사용하여 속성에 액세스할 수 있습니다.

self.name;
// or
_name;

단 'self.name' soundmixer. 액세서의 인컨텍스트 실제로 사용할 수 있습니다.

한 번 밖에 있는 자동 의 합성 작동하지 않습니다. Setter 와 getter 메서드 overwrite 경우 그 후 이 iVar. 의 합성 합니다

그냥 그냥 오버라이드합니다 경우 벌금 또는 틀렸다니까 경우 세터 오버라이드합니다 getter. 하지만 둘 다 이해하지 않으면 다음 컴파일러와의 won& # 39 의 합성, 정보기술 (it) 과 직접 합니다.

이에 따라 어쨌든요 rule of thumb

39 don& 인스턴스 변수, 할 수 없다.

그냥 list. 재산이잖아

39, t 의 합성 don& 거잖나.

해설 (8)

속성 속성 선언될 때 포로토콜 있는 합성 필요합니다. It will not be 합성된 작업공간에서 자동으로 구현 인터페이스입니다.

해설 (2)

전 그 주셔서 감사합니다. 비슷한 문제가 있었습니다.

@synthesize firstAsset, secondAsset, audioAsset;
@synthesize activityView;

이제, 주석, 교체할 수 있다는 것은 내가 겪은 이야기를 통해 각 에셋은 아웃하라는 (예:

하지만 난 내가 보고 싶은 것을 찾을 수 있을 것 같다 난 셀f.퍼스트라스트 또한 list. firstAsset &quot "; 너무 자주 쓴다.

해설 (0)

Xcode doesn& # 39, t '선언' @synthesize 명시성 필요합니다.

39 쓰지 않고 ',' 동일합니까 don& 경우 @synthesize 하고 있다.

@synthesize manager = _manager;

39, ve been 예제 코드 might& 이전. # 39, ll 업데이트하십시오 they& 곧.

다음과 같은 속성을 액세스하세요 수 있습니다.

[self.manager function];

이는 Apple& # 39 의 권장됨 발생원인. 정보기술 (it), 내가 당신을 따라 할 것이 너무!

해설 (4)