2012-01-06 3 views
8

나는 이것을 약속하기 위하여 시험했다! 이것에 대한 많은 정보가 있습니다. 그리고 저는 여전히 추상적 인 개념의 바다에 빠져 있습니다! 내가 어렸을 때처럼 나라가 왜 돈을 더 많이 내고 부자가 될 수 없는지 설명 할 수있는 사람은 없었습니다. 나는 이런 것들이 대부분 지체되어 있지는 않지만, 어떤 이유로이 개념에 대해 머리를 감쌀 수 없기 때문에 가능한 한 천천히 "4 살짜리 이야기"라고 천부적으로 표기 할 수 있다면 정말 고맙겠습니다. !인형을위한 의정서와 대표자

나는 target-action이 나에게 완벽하다고 생각한다. 전체보기를 수행 할 필요없이보기가 컨트롤러와 대화 할 수있게 해주는 유용한 방법입니다. 내가 할 수있는 한 컨트롤러 객체는 리스너를 뷰 객체에 효과적으로 첨부하여 해당 뷰에서 특정 이벤트가 발생하면 (즉, 버튼을 누를 때) 제어기 메소드를 시작하도록합니다. 이것은 기술적으로 정확하지 않을 수도 있지만 추상적 인 설명으로 나에게 의미가 있습니다.

따라서 순서는 다음

  1. 타겟 방법은 제어기 오브젝트에서 생성된다.
  2. 보기가 선택되고 그래픽 방식으로 해당 방법에 연결됩니다.
  3. 컨트롤러에서 메서드를 실행하는 뷰에서 이벤트가 발생합니다.

프로토콜과 대표는 저에게 놀랐습니다. 나는 물건들이 서로 이야기 할 수있게하는 것과 관련이 있다는 것을 알고 있지만, 나는 지금까지의 (부족한) 나의 이해를 쓰려고 노력했다. 그리고 그것을 삭제했다. 나는 현재의 생각에서 매듭을 풀지 않는 것이 가장 좋다고 생각한다. 슬레이트를 닦고 새로 시작하십시오. 행동을/코드의

  • 성분을 대상으로 반대되는 사람이 친절 대표/프로토콜을 사용

    1. 의 목적을 설명하는 약간의 시간을 보낼 수 있고, 그것은 발생하는 이벤트의
    2. 순서를 사는 곳 경우 프로세스가 사용될 때

    나는 영원히 감사 할 것이다.

    다른 설명에 대한 의견으로 판단 할 때, 나는 조금 잃어버린 유일한 사람이 아니라고 생각합니다. 잘하면 이것이 일반적으로 사용됩니다. 정말 고마워!

    편집 : 난 그냥 내 이해 사람들이 저를 수정할 수 있습니다 배치하고이 쉽게 만들 수 있다면 어쩌면 생각으로

    좋아요.

    내 샘플은 Apple Docs에서 가져온 것으로,보기 개체로 Window를, 위임자로 WindowDelegate를 사용하며, 닫기 창 단추를 클릭하면 "닫아야합니까?" 메시지를 대리인에게 보냅니다. 코드의

    구성 성분 : 창 (보기) WindowDelegate (보기 컨트롤러?)

    1. 대리자가 창 (보기)의 인터페이스 섹션에서 사용할 수있는 프로토콜을 선언합니다.
    2. Window에서 대리인의 인스턴스를 만듭니다.
    3. WindowDelegate가 다음을 포함하여 Window Protocol을 구현한다고 명시합니다. 인터페이스에. (여기에서 흔들 흔들?)
    4. WindowDelegate (View Controller) 구현 섹션에이 메소드의 필요한 구현을 작성하십시오.
    5. 특정 이벤트에서 Window는 특정 정보로 WindowDelegate에 메시지를 보냅니다.
    6. WindowDelegate가이를 처리하고 대답을 반환합니다.

    아무 곳이나 마우스 오른쪽 라인을 따라?

  • +2

    관련 : http://stackoverflow.com/questions/6148148/delegates-what-are-they-really/6148838#6148838 – justin

    답변

    -1

    는 대의원 위해 당신은 this question 살펴있을 수 있습니다. 프로토콜에 대한

    당신은 this question을 확인하거나 documentation보고 할 수 있습니다.

    희망이 도움이됩니다.

    +0

    덕분에, 그것은 내가 아직 보지 못한 몇 가지 사실로 안내해주었습니다. 고심하고있다. – Alan

    3

    여기에 많은 것들이 있으며, 혼란스러운 것들이 몇개있는 것 같습니다.

    는 첫째로 나는 당신이 애플 개발자 사이트를 가라고 및 학습 목표 - C 다운로드 것 : 뇌관과 오브젝티브 C 프로그래밍 언어 책. Objective C의 몇 가지 기본 사항을 이해해야하는 것처럼 들리므로 대상/작업 인터페이스 배선 작업을 잠시 무시하십시오. 여기서는 프로토콜 및 기타 객체 지향적 인 사항에 대해 모두 알아볼 것입니다.

    는 두 번째로 응용 프로그램을 개발 단계별로 소요됩니다 거기에 아주 좋은 책이 될 것입니다. iPhone 4 개발 시작 : iOS SDK를 탐색하는 것이 좋습니다. 이것은 또한 대의원에 대한 정보를 얻을 수있는 곳이기도합니다.

    세 번째로 문서에서 시간을 좀 더 보내십시오. SDK 문서에는 일들이 매우 기본적인 수준에서 어떻게 작동 하는지를 설명하는 많은 기사와 Apple Developer 사이트에도 많은 것들이 있습니다.

    +0

    +1 '학습 목표 -C : 뇌관'. 처음으로 Objective-C를 배울 때이 문서가 정말 도움이되었다는 것을 기억합니다! – v1Axvw

    +0

    감사합니다. 저는 현재 Stanford 강의를 진행하고 있으며, 제가 가지고있는 책보다 더 유익하다는 것을 알게되었습니다. 지금 시점에서 5 번째로, Objective-C의 기본 사항을 합리적으로 잘 이해하면, xcode에서 더 많이 쓰이게됩니다. 위의 대상 액션 참조는 관련이없는 것처럼 보일 수 있지만 기본적으로 강사는 컨트롤러 및보기가 통신 할 수있는 두 가지 방법으로 대상 작업 및 프로토콜/위임을 설명 했으므로 여기에 포함 시켰습니다. – Alan

    +0

    어느 정도 그들은 비슷합니다. Target/Action은 기본적으로 Xcode와 Objective C에 특정한 것입니다. Xcode와 Objective C는 기본적으로 애플리케이션에 대한 메타 데이터라고 부르는 것을 제공하기 때문입니다. 컴파일 할 때 XCode는이 정보를 사용하여 작업을 연결하므로 수동으로 코드를 작성하지 않아도됩니다. 위임자 패턴은 언어와 관련이 없습니다. 예를 들어 Java 응용 프로그램에서 사용할 수 있습니다. 따라서 델리게이트 패턴의 개념을 이해하면 타겟/액션의 작동 방식을 이해할 때 Objective C 앱을 통해 좀 더 구체적으로 도움이 될 것입니다. – drekka

    0

    대표자를 이해하려면 Cocoa에서 제공하는 대표단을 살펴보십시오. 예를 들어 NSWindow에는 이라는 대리자 메서드가 있습니다. - (void) windowWillClose : (NSNotification *) aNotification 위임 메서드를 구현하면 알림을보고 닫히는 창이 있는지 확인한 다음 해당 창에 대해 정리를 수행합니다 . 당신은 NSWindow 객체에 대한 델리게이트인데, 이는 당신이 윈도우 객체에 대해 어떤 일을하고 있다는 의미입니다.

    "did", "will", "should"등과 같은 단어를 포함하는 모든 이름의 코코아 델리게이트 메서드는 코드에서 수행 할 정상적인 작업 이외에 특별한 작업을 수행 할 수있는 기능을 제공합니다. 그 개체 자체에 의해 - 그래서 당신은 그 개체에 대한 대리인입니다.

    2

    서브 클래 싱을 피할 수 있도록 대리인이 있습니다.

    서브 클래 싱은 커플 링의 형태가 매우 부족하므로 항상 피해야하는 사항입니다. 커플 링은 두 객체가 서로 의존하여 제대로 작동 할 때 발생하며, 커플 링이 많을수록 프로그램을 변경하는 것이 어렵습니다. 왜냐하면 한 객체를 변경해야 할 때마다 다른 객체를 변경해야하기 때문입니다 그것에 의존하는 객체).

    이유 서브 클래스는 슈퍼 클래스에서 서브 클래 싱 할 때, 당신의 서브 클래스 (서브 클래스가 상속) 슈퍼 클래스의 방법에 따라 달라질 수 있기 때문에 커플 링의 한 형태입니다. 따라서 수퍼 클래스를 변경해야하는 경우 모든 하위 클래스를 변경해야 할 수 있습니다.

    한 가지 방법으로 수행하는 작업을 제외하고는 정확히 같은 개체가 필요하다고 가정 해보십시오. 하위 클래스 화를 통해 여러 하위 클래스를 만들고 이들 모두에 하나의 메소드를 덮어 써야합니다. 그러면 하위 클래스 화 (및 원하지 않는 결합)가 많이 발생합니다. 위임자가 들어있는 곳입니다. 여러 번 하위 클래스를 만드는 대신 하나의 클래스를 만들고이를 익명 형식의 개체 (소유권을 위임받은 개체)의 개체로 설계 할 수 있습니다). 이 자식 객체는 이전에 부모에 있던 단일 고유 메소드를 갖지만 이제는 부모가 자식 객체에 대해 메소드를 트리거합니다.

    여러 클래스를 하위 클래스로 분류하는 대신 동일한 클래스의 인스턴스 묶음을 만들고 각기 다른 대리자 객체를 제공합니다. 유형 ID는 보유하고있는 객체 유형을 지정하지 않으므로 수행 할 수 있습니다. 사용. 각각의 다른 델리게이트 객체는 그 메소드를 다르게 구현하며 서브 클래 싱을 피한다.