2012-11-29 2 views
3

내 프로젝트를 수행하는 동안 viewcontroller viewcontroller에 대한 인스턴스 변수를 @synthezied 속성을 사용하여 설정해야하는지 또는 init이 호출 될 때 인스턴스 변수를 설정하는 새 init 함수를 만들어야하는지 궁금합니다. .@property 또는 init 인스턴스 변수 설정

저에게는 @properties를 사용하여 인스턴스 변수를 설정하는 것이 더 깨끗해 보입니다.

당신은 어떻게 생각하십니까?

난 그냥 쓰기 세터와 게터의 문제에서 당신을 저장하는 특성을 합성

+0

클리너를 결정할 수 없습니다. 컨텍스트 또는 의미를 나타내는 것이 결정됩니다. @Wade의 답을 참조하십시오. – 9dan

답변

2

... 사용 펜촉 또는 스토리 보드를 해달라고. @synthesize을 사용하면 속성이 초기화되지 않습니다. -init 또는 선언 할 때 확실히 초기화해야합니다.

+1

예전에 나는 그것들을 게으르게 인스턴스화하는 데 사용했다. 그래서 그렇게했다면 문제가되지 않을 것이다 :) 나는 단지 초기화 프로그램의 이름이 보통 매우 추악하다고 생각한다. 그들은 마치 ... initwithbla bla1 bla2처럼 될 것입니다. 내가 무슨 뜻인지 아는 경우 :) – WYS

2

나는 지정된 초기 변수 접근법을 설정 인스턴스 변수와 마찬가지로 @synthesized 속성을 통해 사용할 수 있습니다. 뷰 컨트롤러를 초기화하고 속성을 설정하면 개체가 일관성없는 상태로 유지됩니다.

지정 초기화 :

MyViewController * viewController = [[MyViewController alloc] initWithParam1:@"foo" param2:@5]; 
// now viewController is consistent as presumably it has all properties set 

세터를 통해 속성 설정 :

MyViewController * viewController = [[MyViewController alloc] init]; 
// here viewController is inconsistent as it does not have default properties set 
[viewController setParam1:@"foo"]; 
[viewController setParam2:@5]; 
// only here viewController is consistent and can be used normally 

당신이 속성에 대한 기본값을 설정할 수 있습니다 당신의 initialisers의 구현에 따라 너무 initialiser하는 PARAMS로를 통과하지 않고, 그래서 내 두 번째 예제는 init이 자동으로 param1을 @foo 및 param2를 @5으로 설정하면 잘못되었을 수 있습니다.

+0

지정된 초기화 프로그램이 결코보기에는 너무 예쁘지 않습니다. 위의 내 의견을보세요 :)하지만 당신이 의미하는 것을 얻을 수 있습니다 :) – WYS

+0

당신은 너무 많이 사용하지 않을 것입니다.그리고 같은 매개 변수로 초기화 프로그램을 여러 번 사용한다면 ViewController 클래스에 정적 팩토리 메소드를 만드는 것이 합리적일까요? – Eimantas

1

일반적으로 지정된 초기화 프로그램에는 꼭 필요한 매개 변수 만 있어야합니다. 선택 사항은 대개 readwrite @property와 같이 다른 곳으로갑니다. 자유 재량에 따라 약간의 여유가 있습니다. 선택적 매개 변수를 사용하기 때문에 대개 시간의 대부분이 실제로 사용되기 때문에 (그리고 nil이나 0과 같은 쉬운 기본값이없는 경우) 선택적 매개 변수가 포함됩니다.

init 메소드에 의해 반환 된 객체는 어떤 방식 으로든 사용할 수 있어야한다는 생각입니다. 구성 단계를 추가로 요구하면 거의 항상 잘못된 디자인을 나타냅니다.

이 원칙을 따르면 많은 경우에 모두에 필요한 매개 변수를 지정할 수 있기 때문에 변경 불가능한 인스턴스가 권장됩니다. 이는 단순성, 예측 가능성, 스레드 안전성, 복제본 보존 등 여러 가지 이유로 유리합니다.

보기 컨트롤러의 경우 일반적으로보기를 제어하는 ​​이니셜 라이저가 있으며 나머지는 @properties로 남겨 둡니다. 보기 컨트롤러는 일부 용량에서는보기 세트만으로 작동해야합니다. 다른 모든 속성은 적절한 기본값을 가져야합니다.