2011-08-11 3 views
4

iOS 프로그래밍 학습을 위해 이미지 공유를위한 iPhone 응용 프로그램을 개발 중입니다. 응용 프로그램은 웹 사이트의 클라이언트입니다.iPhone 사용자가 응용 프로그램 전체에 로그인했는지 확인하십시오.

didFinishLaunchingWithOptions 나는 사용자가 이미 로그인했는지 확인합니다. 사용자가 로그인하지 않은 경우에도 응용 프로그램의 모든 부분을 볼 수 있지만 예를 들어 프로필 편집을위한 옵션 버튼이 보이지 않을 경우, 이미지에 대한 의견 등

모든보기 컨트롤러에서 기록 된/아니요 상태를 공유하려면 어떻게해야합니까?

답변

5

업데이트 : 오늘이 조언을주고, 내가 사용을 공유 인스턴스를 말할 경우 :

[[SomeClass shared] doSomething]; 
:
@interface SomeClass: NSObject 
{ 
    +(SomeClass *)shared; 
} 

@implementation SomeClass 
{ 
    +(SomeClass *)shared { 
     static SomeClass *shared; 
     static dispatch_once_t onceToken; 

     dispatch_once(&onceToken, ^{ 
      shared = [SomeClass new]; 
     }); 

     return shared; 
    } 
} 

는 그 다음 앱에 걸쳐 처음 사용할 때 당신을 위해 인스턴스를 자동 및 사용할 수 있습니다


개체의 전역 공유 인스턴스 인 단독 개체를 사용할 수 있습니다. 다른 소스 파일에 개체에 액세스해야 할 때 다른 기준에 대해서와 같이

@interface SomeClassSingleton : NSObject { 

} 

+(SomeClass*)sharedSomeClass; 
+(void)setSharedSomeClass:(SomeClass*)someObject; 

@end 

@implementation SomeClassSingleton 

static SomeClass* _someObject = nil; 

+(SomeClass*)sharedSomeClass 
{ 
    return _someObject; 
} 

+(void)setSharedSomeClass:(SomeClass*)someObject 
{ 
    @syncrhonized(self) 
    { 
     _someObject = someObject; 
    } 
} 

@end 

그런 다음, 당신은 다른 헤더에 싱글을위한 헤더 파일을 가져옵니다. 당신이 자동 inits 처음으로 당신이 그것을 접근하는 싱글 톤 구현을 만들 수

[[SomeClass sharedSomeClass] someSharedClassMessage]; 
// OR 
SomeClass* someObject = [SomeClass sharedSomeClass]; 

또는 : 읽기/싱글을

SomeClass* someObject = [[SomeClass alloc] init]; 

[SomeClassSingleton setSharedSomeClass:someObject]; // write to save your singleton 

사용 :

싱글 만들기

@implementation SomeClassSingleton 

static SomeClass* _someObject = nil; 

+(SomeClass*)sharedSomeClass 
{ 
    @synchronized(self) { 
     if (_someObject == nil) { 
      _someObject = [[SomeClass alloc] init]; 
     } 
    }  

    return _someObject; 
} 

@end 
+0

안녕하세요. 좋은 답변에 감사드립니다. 왜 동기화 되었습니까? –

+1

'@ syncrhonized'는 스레드 안전을위한 것입니다. iOS와 같은 다중 스레드 환경에서는 한 번에 둘 이상의 스레드가 공유 객체를 수정하지 않아야합니다. 정적 객체 또는 여기 구현 된 싱글 톤은 단 하나의 복사본으로 메모리에 존재합니다. '@synchronized'는 전달한 객체를 잠 그어서 스레드간에 액세스를 "동기화"함으로써 잠긴 상태에서 액세스하려고 시도하는 모든 스레드가 잠금이 열릴 때까지 기다려야합니다. 이것은 잠금이 설정되어있는 동안 두 번째 스레드가 계속되는 것을 막는 기본적인 "차단"메커니즘입니다. – nekno

+0

좋은 친구 야! –

1

응용 프로그램 대리인과 같은 싱글 톤 또는 모든 것이 볼 수있는 모델 개체 (예 : 사용자 데이터)의 일시적인 값으로 지정합니다. 당신이 응용 프로그램 대리인에게 할당 BOOL 속성을 추가 할 경우

, 당신은 이런 식으로 얻을 수 있습니다 :

myApplicationDelegate *myDelegate = (myApplicationDelegate*)[[UIApplication sharedApplication] delegate]; 

myDelegate.userLoggedIn = YES; 
+0

저는 신생 iOS 개발자이며 싱글 톤 또는 모델 객체를 사용한 적이 없습니다. 당신이 그것을 사용하기위한 몇 가지 힌트 (기사를 아는 사람이라면)를 줄 수 있습니까? 고마워요! –

+0

위의 답변을 수정 해 드리겠습니다. –

관련 문제