이후, 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 붙여야 할까?
그냥 할 경우, t # 39 에서 Xcode mgcc 전환하십시오 선택해제합니다 won& 이러한 기능을 활용할 수 있습니다 (상관 없이 Xcode 에서 버전). 같은 방법으로 텍스트 편집기를 사용하여 컴파일하십시오 클랭 명령줄이 에서 사용하는 경우, 당신은 것입니다.
정말 오토시나시스 don& 합성할 수 있습니다 t need to # 39, 속성 때문에 자동적으로 컴파일러에 의해 합성된 같이 명시적으로
@synthesize _propertyName propertyName =
그러나 몇 가지 예외가 존재한다.
, 모두 getter 및 setter) 는 사용자 정의 구현을 제공할 때 속성 won& # 39 에 자동으로 합성된 것이다.
사용자 정의 구현을 제공할 때 속성, 이 경우, t # 39 에 자동으로 합성된 won& readonlyfrom 킬러.
@protocol 선언된 속성이 있는 -
선언된 특성는 범주입니다 -
이 사건은 '아니다' 가 있는 @synthesize 디렉티브을 자동으로 삽입됨 컴파일러와의 있지만, 이 때는 就不可能拥有 수동으로로 속성 중 하나. 반면 범주입니다 속성 인스턴스 변수 선언할 수 있기 때문에 될 수 없는 합성된 전혀 범주입니다 생성할 수 없습니다. # 39 완성도, I& 생각해서라도, ll, s, s # 39 that& 추가 # 39 it& 여전히 가능한 위한 가짜 속성 합성 name. domain. 오브젝티브-c 런타임용으로 개발하십시오.
정보기술 (it) 의 속성을 오버라이드합니다 수퍼 합성할 때 명시적으로 합니다
마지막 3 건, 제외한 일반 철학에 관한 모든 정보를 대체하십시오 에로남이네 수동으로로 때마다 속성 (대표 구현 방법을 사용하여 모든 액세서의 @dynamic '또는') 컴파일러에서 이를 통해 전체 제어입니다 solaris. 운영까지도 오토시나시스 비활성화합니다 속성 때문이다.
이 밖에 사용하지 않는 경우 별도로, 위에서 언급한 ',' 약간만이라도 명시성 @synthesize 다른 이바르 이름을 지정할 수 있습니다. 하지만, 그래서 내 조언은 항상 flfile. 기본값입니다 명명 규칙은 중요한 것입니다.
[1]: http://clang.llvm.org/docs/LanguageExtensions.html # 목표 캜 오토시나시스 속성
@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 아니라고 생각한다. 하지만 지금은 생각할 때, 새로운 질문은 ',' 이바르 " 사용할 수 있으며, 다른 어떤 것보다, ve I& "? # 39 응답 " never"; 이를 위해 하나!
이러한 측면에서 볼 때:
@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 백킹을 만드는 일이다.
이 때문에 두 가지 방법을 사용할 수 있습니다. 변경하십시오 @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. 여기에 형성하는 사용할지 결정할 수 있습니다.
필요한 것은 알고 있는 경우, 분할 기능을 한 *-i 관련된 여러 범주 여러 파일에서. 그리고 난 # 39, 수정, 심지어 이미 이 애플 wouldn& 놀라지 않는다.
만들 때 재산이잖아 확인
@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
그냥 list. 재산이잖아
Xcode doesn& # 39, t '선언' @synthesize 명시성 필요합니다.
@synthesize manager = _manager;
다음과 같은 속성을 액세스하세요 수 있습니다.
[self.manager function];
이는 Apple& # 39 의 권장됨 발생원인. 정보기술 (it), 내가 당신을 따라 할 것이 너무!