2013-06-27 2 views
1

이것은 규칙/모범 사례에 관한 질문입니다. 두 개의보기 컨트롤러 FooBar이 있다고 가정 해보십시오. Foo은 사물의 목록을 보여 주며 각각의 사물은 연관된 이미지가 있습니다. Bar이 사용됩니다. 예 : Foo에 사람 이름 목록이 표시 될 수 있으며 해당 이름 중 하나를 누르면 Bar 컨트롤러를 사용하여 그 사람의 사진이 표시됩니다. 따라서 Bar에는 Foo의 간단한 정보가 필요합니다.이 경우 표시 할 이미지입니다.대상보기 컨트롤러의 단순 위임 메서드 또는 속성

우리가 Bar에 이미지를 얻을 수있는 두 가지 방법이 있습니다 :

내가) 우리가 정의 BarDelegate 프로토콜의 일종을 사용하여, Bar의 대리인으로 Foo을 설정하고 BarDelegate- (UIImage *)imageToPresent;의 라인을 따라 의무적 인 방법을 가지고는
ii) Bar에 간단한 속성이 있습니다. 예 : @property (nonatomic, weak) UIImage *imageToPresent;이고 FooBar으로 세분하기 전에이 속성을 설정하십시오.

이 두 가지 중에서 규칙이나 선호하는 방법이 있습니까?

가장 좋은 방법은 위임 방법의 장점은 Bar에 필요한 몇 가지 사항이 있음을 분명히 알 수 있다는 것입니다. 물론 Foo은 자신을 Bar 대리인으로 설정하는 것을 잊어 버릴 수도 있지만 Bar이 10 개의 필수 속성을 말하면 이제는 10 개가 아닌 1 개의 장소 만 망칠 수 있습니다 (대리인을 잊어 버리는 것을 잊어 버릴 수 있습니다). 속성을 사용하는 이점은 코드가 간결 해집니다. 문제의 속성이 대상보기 컨트롤러의 수명주기 전체에서 불변 인 경우에만 관심이 있다는 점에 유의해야합니다. 라이프 사이클 전반에 걸쳐 프로퍼티가 변형되어 있고 대상 뷰 컨트롤러가 소스 뷰 컨트롤러를 두 번 이상 "쿼리"해야하는 경우 위임에 추가적인 매력이있을 수 있음을 알고 있습니다.

답변

1

위임은 일반적으로 위임 된 개체가 추가 데이터를 요청하거나 콜백을 수행하기 위해 마스터 개체와 통신 할 수있게하기 위해 사용됩니다.

위임 된 개체에 이미 필요한 모든 것을 제공하지 않는 이유는 없습니다. 두 번째 옵션은 가장 합리적인 방법입니다.

일반적으로, 위임 흐름은 더 많거나 적은이

같이 간다 ". 안녕 바, 여기 당신을위한 작업이있어이 데이터를 사용하여 당신의 일을"

[ 나중에]

: "이봐 요,이 일이 방금 일어 났어요!"
: "오, 멋지다!이봐 상사, 나는 거 작업 결론을 더 뭔가가 필요 해요 "
를 :"여기입니다 "입니다 : 내가"

[나중에]

"알려 주셔서 감사합니다

[나중에]

: "이봐 보스, 내가 다 했어! 여기에 내 작품 "

BazDelegate 프로토콜 (예를 들어, 사용자가 상세보기에서 선택을 수행) Foo에 다시 통신 할 필요가 Baz 경우에 적합 할 사용자 정의의 정의의 결과입니다.

이 경우 당신은 일반적으로 위임 된 객체로부터 의미있는 콜백을받을 Foo에서 그것을

@protocol BazDelegate 
- (void)baz:(Baz *)baz didFinishSelectingWhatever:(id)whatever; 
@end 

같은 것을 정의하고 구현하는 것입니다.

관련 문제