2011-09-06 5 views
0

정적 NSSet을 사용하여 클래스의 모든 인스턴스에서 공유하는 일부 요소를 정의한 클래스를 생성했습니다. 당신은 내가 설정을 유지 볼 수 있듯이Cocoa는 정적 변수를 내 놓습니다.

myStaticSet = [[NSSet setWithObjects: 
         @"element one", 
         @"element two", 
         nil 
         ]retain]; 

:

이 내가이 코드를 사용 SE는 정의합니다.

나는 정말로 내가 어디서 풀 수 있는지 이해할 수 없다. 나는 dealloc에서 그것을 공개 할 수 없다고 확신한다. 그래서 정적 변수를 공개하는 방법이 있는가?

// EDIT 정적 값을 해제하는 새로운 클래스 메서드를 추가하는 것이 좋은 해결책 일 수 있습니까?

+(void)cleanstatic{ 
    [mystatic release]; 
} 

내가이 클래스로 끝났다고 확신 할 때 전화 해 주시겠습니까?

답변

5

정적 변수를 사용하고 있고 그것을 해제하려면 어쩌면 결국 정적이 아니어야합니까? 응용 프로그램의 전체 수명 동안 사용됩니까? 이 경우 나는 그것을 풀어 놓을 필요가 없다고 말하고 싶습니다.

그렇지 않으면이 변수를 사용하는 코드에 대한 일부 '끝점'이있는 경우이를 제거 할 수있는 곳이됩니다.

+0

고맙습니다. 제 편집물을 이용해 주시겠습니까? – MatterGoal

+0

물론 가능 합니다만, 예를 들어 멀티 스레드 시나리오에서는 오류가 발생하기 쉽습니다. 가능하다면 인스턴스 변수로 가져 오기 위해 코드를 리팩터링하는 것이 좋습니다. 그런 다음이를 따라 처리하고 릴리스 할 수 있습니다. 변수를 해제하고자하는 뭔가가 있습니까? 많은 데이터를 보유하고 있습니까? – lbergnehr

+0

그것은 단지 20 문자열이 걸립니다,하지만이 코드를 작성하는 올바른 방법을 찾고 있어요. 이 클래스의 모든 인스턴스에 대해 20 개의 문자열을 만드는 것은 올바른 방법이 아니므로 정적 변수를 채택하려고 생각했습니다. 그래서, 다중 쓰레드 시나리오에서이 구현은 큰 혼란이 될 것입니다. – MatterGoal

3

공개하지 마십시오. 말했듯이, 클래스의 모든 인스턴스가 공유하므로 새 인스턴스를 만들지 않을 수 없습니다. 따라서 앱이 실행되는 동안 세트가 존재해야합니다.

관련 문제