2012-06-21 2 views
0

내 응용 프로그램 내부에서 핵심 위치 프레임 워크를 사용하고 서버에 업데이트 된 위치를 보내려면 didUpdateToLocation 메서드를 사용하고 CLLocationManager 인스턴스를 할당하는 뷰는 로그인 후 두 번째보기이고이보기는 로그인보기에서 호출되고 dealloc 메서드에서 CLLocationManager를 해제합니다. 하지만 로그인 화면에서 나올 때마다 로그인보기에서 몇 번이나 오는지에 따라 두 번이나 세 번 전화하는 didUpdateToLocation 메소드가 문제가 무엇인지, 어떻게 피할 수 있습니까? 당신이 당신의 CLLocationManager 인스턴스의 여러 할당을 방지하여 appDelegateCLLocationManager 인스턴스를 여러 번 할당하지 않으려면 어떻게해야합니까?

이 인스턴스를 얻을 필요가 때마다의 속성으로 인스턴스를 정의하려면

답변

1

당신은 그냥 보통

YouAppDelegate *appDelegate = (YouAppDelegate *)[UIApplication sharedApplication].delegate; 
appDelegate.yourLocationInstance; 
1

할 것 이 유형의 것에는 singleton을 사용하십시오. 클래스 메소드를 정의하기 만하면됩니다 (메소드 정의에서 + 대 a -를 사용). 다음은 싱글 톤 정의의 예입니다.

+(id)sharedLocationManager 
{ 
static BCLocationManager *sharedLocationManager; 
@synchronized(self) 
{ 
    if (!sharedLocationManager) 
    { 
     sharedLocationManager = [[BCLocationManager alloc] init]; 
    } 

    return sharedLocationManager; 
} 
return sharedLocationManager; 
} 

기본적으로 클래스의 정적 인스턴스를 정의하고 존재하지 않는 경우 초기화합니다. 싱글 톤을 사용하면 인스턴스 초기화 함수에 액세스하지 않습니다. 항상과 같이 적절한 포인터 싱글 접근의 결과를 할당합니다

BCLocationManager * testInstance = [BCLocationManager sharedLocationManager]; 

지금 당신이 할 일은 당신의 위치 관리자의 단일 인스턴스를 볼 수 있습니다 응용 프로그램에서 적절한 header.h가 모두 포함됩니다. init의 인스턴스를 사용하지 않는 한 절대 하나 이상의 인스턴스를 만들 수 없습니다.

관련 문제