2011-02-18 3 views
0

인사말,목표 C : 모든 뷰에서 액세스 가능한 저장 변수

첫 번째 iPhone 앱을 쓰려고합니다. 모든 뷰에서 데이터에 액세스 할 수 있어야합니다. 데이터는 사용자가 로그인 할 때 저장되며 그 이후의 모든보기에서 사용할 수 있어야합니다.

정적 클래스를 만들고 싶습니다. 그러나 정적 클래스에 액세스하려고 할 때 콘솔에 출력이 없으면 응용 프로그램이 충돌합니다.

파일에 데이터를 쓰는 유일한 방법은 무엇입니까? 아니면 제가 생각하지 못했던 또 다른 클리너 솔루션이 있습니까?

많은 난 당신이 "정적 클래스"로 무슨 뜻인지 모르는

답변

7

싱글 톤 클래스를 사용하여 응용 프로그램 내부 어디에서나 액세스 할 수 있어야하는 전역 데이터 관리자 클래스에 대해 항상 사용합니다. 다음과 같이 간단한 것을 만들 수 있습니다 :

@interface NewsArchiveManager : NetworkDataManager 
{ 
} 

+ (NewsArchiveManager *) sharedInstance; 
@end 

@implementation NewsArchiveManager 

- (id) init 
{ 
    self = [super init]; 
    if (self) 
    { 
     // custom initialization goes here 
    } 

    return self; 
} 


+ (NewsArchiveManager *) sharedInstance 
{ 
    static NewsArchiveManager *g_instance = nil; 

    if (g_instance == nil) 
    { 
     g_instance = [[self alloc] init]; 
    } 

    return g_instance; 
} 


- (void) dealloc 
{ 
    [super dealloc]; 
} 

@end 
+0

제공하는 코드는 표준적인 관행 인 것처럼 보이며 어디에서나 볼 수 있습니다. 그러나 나는 항상 궁금해하고 있었다. 이 ** sharedInstance ** 메소드가 메모리 누수의 원인이되지 않습니까? alloc 및 init 만 있지만 dealloc/release가 없기 때문에 메모리 부분을 해제 할 수 있습니다. –

+0

싱글 톤 클래스를 만들 때 3 가지 메소드 (CreateInstance, GetInstance, DeleteInstance)를 갖고 싶습니다. 사용자가 개체를 해제해야하는지 여부를 알지 못하기 때문에 GetInstance 만 있으면 혼란 스럽습니다. CreateInstance()를 사용하여 사용자는 DeleteInstance()에 대한 호출과 일치해야한다는 것을 알 수 있습니다. –

+1

싱글 톤의 일반적인 개념은 영원히 산다는 것입니다. 따라서 "누출"은 액세스 할 수없는 객체가 할당 해제되지 않고 싱글 톤에 항상 액세스 할 수 있기 때문에 "누설"이 아닙니다. 그러나 나는 당신의 표류를 잡습니다, 그렇습니다, 싱글 톤은 기억을 사용합니다. 특별한 "deallocSharedInstance"를 구현할 수 있습니다. 또는 deallocSharedInstance를 해제하고 g_instance를 nil로 설정하면 잠시 사용하지 않고 메모리를 되 찾을 수 있습니다. – Bogatyr

1

사전에 감사합니다,하지만 당신이 원하는 것은 singleton입니다. 설정 방법에 대한 다양한 방법은 this question을 참조하십시오.

관련 문제