2013-03-19 3 views
6

Obj A가 Obj B에게 대리인 메시지를 보내고 단추를 눌렀을 때와 같은 시나리오가 있습니다. Obj B는 위임 호출을 기반으로 일부 동작을 수행합니다.대리자 메시지는 항상 반환 형식으로 void가 있어야합니까?

Obj A는 위임 메시지가 호출 된 후 발생한 결과를 바탕으로 화면에 무언가를 표시하려고합니다.

라고 말하면 Obj B는 작업이 수행 된 횟수를 나타내는 카운터를 유지 관리합니다.

그래서 Obj A가 버튼을 누르고 델리게이트 메소드를 호출 할 때 델리게이트 메소드가 현재 카운터에서 값을 반환하는 것이 좋은가요?

Obj A가 카운터 업데이트 값을 표시 할 수 있도록합니다.

이 경우 동일한 메시지가 대리인과 데이터 소스로 모두 작동합니다.

나를 위해 Obj A는보기이고 Obj B는보기 컨트롤러입니다.

구현에 결함이 있습니까?

+1

델리게이트는 특별한 것이 아닙니다. 액세스하려는 일부 기능을 포함하는 클래스/인스턴스/메소드 일뿐입니다. 예를 들어, 상자의 파일 시스템을 대리인 세트로 볼 수 있습니다. 사용자는이를 호출하고 서비스를 수행합니다. –

답변

5

구현이 마음에 들었습니다.

대리인과 데이터 소스 역할을 구별하지 않더라도 더 단순한 방식으로 결합합니다.

  • A (보기) B (대리자) 전송 "나는 도청했다"또는 비슷한 무엇인가라는 메시지 :

    나는 지금까지 MVC의 개념을 그대로 구현할 수있는 적절한 방법을 생각한다.

  • B (대리인)는 필요에 따라 작동하고 "reloadData"라는 메시지를 A에게 보냅니다.

  • A는 표시 할 데이터에 대해 B (데이터 소스로)를 묻습니다.

다른 많은 경우에 발생으로 귀하의 경우 위임 및 데이터 소스가, 같은 객체이기 때문에

는, 당신이 그랬던 것처럼 흐름을 구현하기 위해 나에게 아주 그럴듯하고 전혀 결함이 보인다 :

  • A (보기)는 B (대리자 & 데이터 원본)에게 메시지를 보내고보기를 새로 고치는 데 필요한 데이터 정보를 수신합니다.
3

아니요 대부분의 경우 void가 아니라 값을 반환하지 않습니다. 이 때문에 너무 전문하지만 그래서 그들이 할 수있는 일 필요는 없습니다 않습니다

그러나 많은 다른 구성 요소 :

은 .. 하나의 예는 UITextView의 위임 유효하고 일반적으로 사용되는 방법입니다

이됩니다 일반 남아 있음

2

아니요, 규정에 어긋나면 void가 반환됩니다.

비 공백 값을 반환하는 숫자가 많습니다. delegates입니다.

- (BOOL)application:(NSApplication *)sender 
    openFile:(NSString *)filename;      // NSApplication 
- (BOOL)application:(UIApplication *)application 
    handleOpenURL:(NSURL *)url;       // UIApplicationDelegate 
- (UITableRowIndexSet *)tableView:(NSTableView *)tableView 
    willSelectRows:(UITableRowIndexSet *)selection;  // UITableViewDelegate 
- (NSRect)windowWillUseStandardFrame:(NSWindow *)window 
    defaultFrame:(NSRect)newFrame;      // NSWindow 
관련 문제