2014-06-19 1 views
0

나는 싱글과 잘 .Below입니다 작업 코드를 구현하는 튜토리얼을 따라 즉석 메서드 init 내부. 제발 도와주세요.어떻게 정적 변수 작품 싱글

+0

인스턴스 메소드에서 정적 변수를 사용할 수 있습니다. 그러나 그 역은 사실이 아닙니다. 정적 메서드에서는 인스턴스 변수에 액세스 할 수 없습니다. – CrimsonChris

+0

당신은 올바른 선생님입니다! 이들은 OOP 기간 동안 내가 놓친 개념입니다. OOP에서 모든 것을 배울 수있는 사이트, 책을 공유 할 수 있습니까? – dinesh

+0

http://www.raywenderlich.com/45940/intro-object-oriented-design-part-1 – CrimsonChris

답변

3

정적 변수는 응용 프로그램 시작시 할당되고 응용 프로그램의 수명 동안 존재하는 "정적"저장소에 저장된 변수입니다. 목표 C에서는 클래스의 일부가 아니지만 액세스 가능성은 변수가 정의 된 위치로 범위가 지정됩니다. 또한 인스턴스 변수가 인스턴스 변수와 다르다는 것은 개체 하나당 하나가 아니라 전체 응용 프로그램에 대해 하나의 인스턴스 만 있다는 점입니다.

일반적으로 오브젝티브 C의 단일 패턴을 정의하기위한 더 나은 방법이 너무 같다 :

+ (instancetype)dKSingleInstance { 
    static DKSingle* dKSingle; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     dKSingle = [[DKSingle alloc]init]; 
    }); 
    return dKSingle; 
} 

이는 정적 변수는 단지 하나의 방법으로 범위 만든다. 또한 dispatch_once을 사용하면 정적 변수를 초기화하기위한 스레드 안전성을 제공합니다.

+1

답변을 주셔서 감사합니다! 하지만 oops를 배우는 것은 인스턴스 메소드가 정적 변수에 액세스 할 수 없다는 것입니다. 내 일례로 그런 일이 일어나고 또한 일하고 있습니다. 오빠 개념에서 나를 도울 수 있습니까? – dinesh

+0

정적 변수는 OOP의 반대입니다. OOP는 데이터 만 캡슐화하도록 설정되어 개체 만 상태를 수정할 수 있으며 노출 된 메서드를 호출하여 수정 작업을 수행 할 수 있습니다. 정적 변수는 어떤 객체에도 속하지 않습니다. 그것은 응용 프로그램에 속합니다. 많은 사람들이 그것을 [anti-pattern] (http://stackoverflow.com/q/12755539/1270148)이라고 생각합니다. –