2016-10-21 3 views
0

자기 자신을 슈퍼 init에 할당하지 않고 완전히 다른 포인터, 심지어 정적 포인터에 할당 할 때 어떤 의미가 있습니까? 아크가 올바르게 작동합니까? 그러한 행동의 함축은 무엇입니까?init에서 다른 포인터에 자신을 할당하기

static NSObject * StaticObject; 

- (instancetype)init { 

    self = StaticObject; 
    if (self) { 

    } 
    return self; 
} 

답변

2

ARC는 정상적으로 작동합니다. StaticObject를 초기화하는 데 문제가 있습니다. 당신은 비슷한 것을 할 수 있습니다

if (StaticObject == nil) { 
    self = [super init]; 
    StaticObject = self; 
} else { 
    self = StaticObject; 
} 

나는 NSNull 클래스가 그런 식으로 생각한다고 생각합니다.

StaticObject가 nil이 아니며 초기화 된 것으로 가정하면 StaticObject를 수정하면 다른 객체가 참조를 보유 할 수 있으므로 혼동을 야기 할 수 있습니다.

0

안전하다고 확신하지 않습니다. 나는 당신이 원래의 자신의 기억을 새기고 잠재적으로 나중에 당신의 싱글 톤을 과도하게 공개 할 것이라고 생각합니다. ARC는 마술이 아니며, 호출자의 retain/release 호출에 몰래 들어가서 ARC가 alloc 호출의 결과를 보지 못하게합니다.

관련 문제