2012-10-27 2 views
9

나는 데이터가 내 데이터베이스에 쓰여질 때까지 데이터를 누적하는 싱글 톤 클래스를 가지고있다. (왜 이런 식으로 구현하는지 알고 싶다면 here 참조). 데이터를 저장 한 후, 나는 싱글 톤을 파괴하고 싶습니다. ARC에서 어떻게하면됩니까? 아니면 내가 편집증 환자이고 그것을 전혀 파괴해야합니까?iOS : ARC에서 싱글 톤을 어떻게 없앨 수 있습니까? 해야합니까?

*이 질문은 this 개의 질문과 중복 될 수 있습니다. 그러나 여기에 수락 된 답변은 도움이 될만한 것은 아닙니다. 그것은 "명시 적으로 호출하는 메소드/함수를 선언 할 수 있습니다."이 코드는 어떤 모양일까요? 메서드 외부에서 개체를 릴리스 할 수없는 경우 메서드 내에서 개체를 가져올 수 있습니까? 그것은 또한 "말합니다 가장 간단한 방법은 정적 C++ 클래스를 보유한 다음 소멸자에서 해제하는 것입니다." C++을 모르지만 앱 코드에 C++ 클래스를 넣을 수 있습니까?

내 싱글은과 같이 구현됩니다 : 당신이 싱글을 파괴하는 경우

+(NHCFamilyStatus *)familyStatus 
{ 
    static dispatch_once_t pred; 
    static NHCFamilyStatus *familyStatusSharedObject=nil; 

    dispatch_once(&pred,^
    { 
     familyStatusSharedObject = [[NHCFamilyStatus alloc] init]; 
    }); 

    return familyStatusSharedObject; 
} 
+1

[이 게시물이 제대로 싱글 톤을 구현하기로 참조하시기 바랍니다, 당신을 도울 것입니다] [1] [1] : http://stackoverflow.com/questions/7598820/correct-singleton- pattern-objective-c-ios – chrislhardin

+0

왜 데이터가 들어있는 버퍼뿐만 아니라 싱글 톤을 파괴합니까? – Jano

+0

@Jano 그 버퍼를 어떻게 파괴 할 수 있는지 설명해 주시겠습니까? – cmac

답변

19

, 당신은 다시 만들 수 없을거야 (즉, dispatch_once 호출의 의미이다).

에는 싱글 톤을 없애기 위해이 필요하지 않습니다. 꼭 필요없는 인스턴스 변수를 제거하는 싱글 톤에 대한 메소드를 갖지만, 다른 것을 할 필요가 없습니다.

+0

물론입니다 (re : dispatch_once). 인스턴스 변수를 null로 만드는 것은 메모리를 확보하기 때문에 주로 유용합니다. – cmac

+0

예, 작업중인 데이터를 저장 했으므로 상태를 다시 설정합니다. – jrturton

+0

@jrturton 답변에서 싱글 톤 객체를 파괴 할 수 있는지 없는지를 말할 수 없습니다. 당신은 "당신은이 싱글 톤을 파괴 할 수 없다"고 말한 다음 "싱글 톤을 파괴 할 필요가 없다"고 말합니다. 그 (것)들을 가진 나의 경험은 그 (것)들을 파괴하는 것이 가능하다, 다만 그런 필요를 가지고 있기 위하여 특별한, 당신이 말한대로 - 당신이 dispatch_once() 안에서 처음에 창조 된 경우에 그것을 다시 만들 수 없다이다. 그냥 똑바로 대답을하려고 오전, 당신을 도전하지 오전 :) – pnizzle