2012-03-30 3 views
-2

저는 iOS와 Objective-C를 처음 접했습니다. 클래스에서 정의한 클래스의 속성은 해당 클래스의 "인스턴스"에서만 시작할 수 있다는 것을 이미 알고 있습니다.클래스 메서드에서 사용할 수있는 클래스에 속성을 저장하는 방법은 무엇입니까?

Objective-C에는 클래스의 클래스 메소드에서 사용할 수있는 일부 데이터를 저장할 수있는 메커니즘이 있습니까?

구체적으로 말씀 드리면, 저는 조용한 간단한 RPN 계산기 응용 프로그램을 만들고 있습니다.

스탠포드 iOS 프로그래밍 데비안 (CS193P)의 튜토리얼에 따라 RPNC 계산기 가상 모델 RPNCalculatorBrain을 만들고 속성은 (id)program이고 클래스 메서드는 +(double)runProgram:(id)program입니다.

(id)program은 기본적으로 사용자가 입력 한 모든 피연산자와 연산을 포함하는 배열입니다.

다른 클래스 (이 프로그램의 상황에서는 functionGraphMVC)가이 클래스 메서드에 (id)program을 전달하고 프로그램 (또는 함수)의 결과를 얻을 수 있도록 클래스 메서드를 사용하는 것이 좋습니다. 그래서 모델 RPNCalculatorBrain은 가능한 한 일반적인 것으로 만들 수 있습니다.

그리고 또 다른 클래스 메소드 +(double)runProgram:(id) program using:(NSDictionary*)variableValues이 있습니다. 그것은 위의 클래스 메서드의 변수 판입니다. 따라서 id(program)에 변수 (X, a, b)가있는 경우이 클래스 메서드는 (NSDictionary *)variableValues을 사용하여 변수의 값을 해석 할 수 있습니다.

개인적으로는이 방법을 개선하고 싶습니다. Calculator의 특수 연산 (π, e)과 변수 (x)를 내 모델 (CalculatorBrain)에 저장할 수 있는지 궁금해서 클래스 메서드 +(void)setXValue();을 누구 에게든 제공합니다. 그것을 사용하길 원합니다. 따라서 계산에 관한 모든 것을 내 모델에 저장할 수 있습니다. 그러나 내가 아는 한, 클래스 메소드에서 사용할 수있는 것을 저장할 수는 없습니다.

이 정보를 NSUserDefault에 저장하는 것은 부적절한 것으로 보이며 아직 코어 데이터에 대한 문서를 읽지 않았습니다.

나는 내 생각이 이상하고 순진한 듯하다. 나는 똑같은 일을하기 위해 대체 접근법을 사용할 수는 있지만, 가능하다는 것을 알고 싶다. 감사!

제 설명이 당신을 혼란스럽게한다면, 용서해주세요! 내 글쓰기 영어는 ...

+0

질문이 명확하지 않습니다. 제네릭이 필요하다면 객관식에 제네릭이 없습니다. – Gargo

+0

명확한 질문이 아닙니다.보다 구체적으로 질문하십시오. – Kiran

답변

1

일반적인 접근법은 클래스의 구현 파일에 정적 전역 변수를 만든 다음 +initialize 클래스 메서드 (see this question)로 초기화하거나 비슷한 방법으로 지연 초기화합니다. 클래스 수준 속성 접근 자에게 전달합니다.

그러나 설명하는 디자인에 관한 모든 내용은 의문의 대상입니다. 상태가있는 전역 적으로 액세스 가능한 객체가 정말로 필요한 경우에는 Singleton 패턴을 구현할 수 있습니다. 그렇더라도 의존성 주입이 더 나은 접근 방법이 될 수 있으므로 모든 곳에서 하나의 구체적인 구현에 자신을 연결하지 마십시오.

+0

감사합니다. 디자인을 다시 생각해 보겠습니다. – ifournight

관련 문제