, 당신은 같은 것을 할 수 있습니다 : 그것은 나의 이해는 현대 런타임 함께@synthesized 인스턴스 변수를 언제 사용하지 않겠습니까? 현대 오브젝티브 C 런타임에서
@interface MyClass : NSObject {
}
@property NSString *stringProperty;
@end
@implementation MyClass
@synthesize stringProperty;
@end
이 단지 내 속성에 대한 접근을 합성하지 않을 것이다, 그러나 또한 인스턴스 변수 자체, 그래서 나는이 클래스의 메서드 중 하나 인 [stringProperty length];
에서 말할 수 있었고 마치 인스턴스 변수를 선언 한 것처럼 작동 할 것입니다.
필자는이 코드를 지금 모든 코드에서 사용하기 시작했습니다. 왜냐하면 필자가 반복해서 작성해야하는 것은 하나이기 때문입니다. 그리고 clang 2.0 컴파일러에 대해서 들었습니다. @synthesize
을 건너 뛸 수도 있습니다 (하지만 다른 문제입니다). 그러나 나는 궁금해했다. 이것을하기에있어서의 단점은 무엇인가? 내 속성에 실례로 인스턴스 변수가 필요할 수 있습니까?
가끔은 변수를 비공개로 유지하고 외부 액세스 권한을 부여하지 않을 때가 있다는 것을 알고 있습니다 (하지만 보통 개인 클래스 확장에서 속성을 선언하거나 그 속성을 만들지 않습니다). 내가 접근자를 필요로하지 않는다면 모두).
내가 이것을하고 싶지 않은 경우가 있습니까?
@joe 예, 속성을 선언하고 위와 같이 합성했지만 ivar을 명시 적으로 선언하지 않으면 컴파일러는 여전히 ivar을 만듭니다. 그래서 클래스 안에서 기대할 수있는'int len = [self.stringProperty length]'를 할 수 있었고 접근 메소드를 사용하지 않고'int len = [stringProperty length]'를 할 수도 있습니다. ivar (컴파일러가 setter + getter와 함께 나를 위해 합성했다). 정말 환상적입니다! – jbrennan
@joe XCode4가 이제 앱 대리인을 위해 생성되는 스텁을 검사 한 결과 알게되었습니다. –