동기화 된 함수가 있지만 해당 블록의 인스턴스 변수 값을 직접 변경할 수없는 것으로 보입니다.Objective C에서 동기화 된 블록의 인스턴스 변수 설정
+(id)allocWithZone:(NSZone *)zone
{
@synchronized(self) {
if (sharedInstance == nil) {
sharedInstance = [super allocWithZone:zone];
//This is not allowed
something = @"hello";
//This is allowed
self.something = @"hello world!";
return sharedInstance;
}
}
return nil;
}
왜 이런 경우입니까? 직접 액세스해야하는 변수가 있습니다 (변수를 합성하고 싶지 않습니다). 이 문제를 어떻게 해결할 수 있습니까?
"허용되지 않습니까?" 이 코드는 컴파일되지 않습니까? 런타임에서 오류를 트리거 하시겠습니까? 충돌이 발생하면 충돌의 세부 사항을 제공 할 수 있습니까? – Tim
@Darren 인스턴스 메서드와 같은 클래스 메서드를 처리하고'-init'이 호출되기 전에 ivars를 설정하려고한다는 사실부터 시작하여 많은 잘못되었습니다. –
@Kevin하지만 싱글 톤 개체의 경우 클래스 메서드 (+로 시작하는)는 인스턴스 메서드 (-)와 실제로 동일합니다. –