2013-08-09 3 views
0

나는 '캡쳐 (Capture)'라는 이름의 클래스를 NSObject의 하위 클래스로 사용하며 뷰를 슈퍼 뷰에 추가합니다.싱글 톤을 해제하는 방법은 무엇입니까?

슬라이더로 구성된 Settings.bundle을 추가했습니다. 슬라이더 값이 'ON/1'인 경우 주 창에서 '캡처'의보기를 하위보기로 표시합니다. 슬라이더 값이 'OFF/0'이면 '캡처'에서 추가 된 뷰를 제거하고 '캡처'에있는 모든 객체를 릴리즈해야합니다.

슬라이더 값이 'OFF/0'인 경우 '캡처'클래스로 만든보기를 기본보기로 숨기고 싶지 않습니다.

앱이 종료 될 때가 아니라 앱이 백그라운드로 전송 될 때 '캡처'를 취소하고 싶습니다. 따라서 UIApplicationWillTerminateNotification 알림을 사용하여 싱글 톤을 탈퇴 할 수 없습니다. 난 그냥 '캡처'에 의해 표시되는 뷰를 숨기면

는, 그래서 지금 내가 싱글을 할당 해제 할 방법을 '캡처'클래스

메모리의 불필요한 사용이있을 것이다.

'캡처'클래스보기는 이벤트가 발생하더라도 모든보기 컨트롤러 위에 있습니다. AppDelegate에서 호출되는 클래스 메서드에 의해 한 번 할당됩니다.

static ScreenCapture *sharedScreen = nil; 

+(Capture *)sharedScreenCapture 
{ 
    if (!sharedScreen) 
    { 
     sharedScreen = [[Capture alloc] init]; 
    } 
    return sharedScreen; 
} 
+0

싱글 톤을 만드는 방법에 대한 코드를 표시하십시오. – Wain

+4

모든 것을 싱글 톤으로 만드는 저주 ;-) –

+0

정적 ScreenCapture * sharedScreen = nil; + (캡처 *) sharedCapture { if (! sharedScreen) { \t \t sharedScreen = [[Capture alloc] init]; \t} \t return sharedScreen; }이 메소드는 appdelegate에서 호출됩니다. – user1899840

답변

3

왜 모든 현금화을 취소하고 개인 변수를 무효화 몇 가지 ReLoad 방법을 만들 수 없습니다 :

싱글이 방법을 만들어? 이 같은

뭔가 :

+(void) reLoad { 
    @synchronized(self) { 
     // clear all the cashes... 
     sharedScreen = nil; 
    } 
} 

그리고 당신은 다른 방법을 추가 할 수 있습니다 UIApplicationWillTerminateNotification

[ScreenCapture reLoad];

+0

그러나 사용자가 백그라운드에서이 앱을 전송하고이 앱의 슬라이더 값을 변경하고 앱으로 돌아 오면 변경 사항이 표시되어야합니다. 예를 들어, 사용자가 슬라이더 값을 'NO'로 변경하면 'Capture'에 표시된보기가 보이지 않아야합니다. 보이지 않을 것이므로 나는 단지 '캡처'를 해제 할 생각을했습니다. – user1899840

2

를받은 후 그것을 전화 : 싱글이 실제로 있는지 여부를 고려

+ (void)destroyScreenCapture 
{ 
    sharedScreen = nil; 
} 

을 올바른 patte 당신이 정말로 싱글 톤을 파괴 할 필요가 있는지, 아니면 현재 사용하지 않는 데이터에 대한 모든 메모리를 해제하기 위해 '클린 (clean)'해야 하는지를 결정해야합니다.

+0

감사합니다 .. 나는 싱글 톤이 할당 해제되지 않는다고 생각했고, 할당을 해제하면 직접적으로해서는 안된다. – user1899840

+5

싱글 톤을 할당 해제하면 안된다. 싱글 톤이 되라. – Wain