의 지역 변수 우리는 클래스의 인스턴스를 인스턴스화에 대한 다음 패턴에 익숙하다 :목표 - C 클래스 메서드 유형 "자기"
+ (instancetype)createInstance {
return [[self alloc] init];
}
이 경우 "자기"를 참조하기 때문에이 작품 클래스 청사진에서 빌드 된 객체가 아닌 클래스입니다.
우리는이 선언을 알고는, 가장 일반적으로 사이클을 유지 방지에 사용 :
typeof(self) someStrongSelf = self;
이것은는 self
의 유형은 동적 수와 상관없이 클래스를 필요한 곳마다 그 코드를 복사하여 붙여 넣을 수 있습니다.
클래스 메소드에서 인스턴스 위의 두 가지 패턴 조합과 내 질문에 거래
:+ (instancetype)createInstance:(MyObject*)dependency {
typeof(self) instance = [[self alloc] init];
instance.dependency = dependency;
return instance;
}
이는 self
때문에 작동하지 않습니다 클래스이며, typeof(class)
그냥 Class
이지만, 거기에 일부입니다 메커니즘을 typeof (인스턴스)와 동일한 유연성을 허용하는 instancetype
에 해당하는 로컬 변수에 사용할 수 있습니까? 예를 들어 : 오브젝티브 C가 원하는 선언을 허용하는 경우 정말이 공식화 원한다면
+ (instancetype)createInstance:(MyObject*)dependency {
instanceof(self) instance = [[self alloc] init]; //desired keyword
instance.dependency = dependency;
return instance;
}
은,이 대안은 위와 같이 기본적으로 같은 일을하는 프로토콜을 정의하는 것입니다 알고,하지만 난 궁금 스타일을 그대로 유지합니다.
@Rob에 동의합니다. 왜 당신이 그것을 너무 일반적으로 유지하려고하는지 확신 할 수 없습니다. TheClass * instance = [[TheClass alloc] init]; instance.dependency = dependency;' –
내 질문에는 실용적인 이유가별로 없다는 것을 인정합니다. 나는'[[self alloc] init]에 대한 호출을 강력하게 타이핑했다. 키워드를 간과하면 궁금했다. 하지만 그 전에 Objective-C와 관련된 모든 의문 질문에 나온 것 같아요 ... – Chris