Xamarin.ios의 일반적인 패턴 및 관용구Common patterns and idioms in Xamarin.Mac

를 통해 C#노출 되는 Apple api 전체에서 특정 관용구 패턴은 다시 발생 합니다.Throughout the Apple APIs exposed via C#, certain idioms and patterns come up over and over again. Xamarin.ios를 사용 하 여 프로그래밍 하는 경험이 있다면 이러한 작업을 잘 살펴볼 수 있습니다.If you have experience with programming with Xamarin.iOS, these may look familiar. 설명서는 종종 이러한 패턴을 반복적으로 참조 하 고 관용구을 확실 하 게 이해 하 게 되 면 찾은 설명서를 이해 하는 데 도움이 됩니다.Documentation will often refer to these patterns and idioms repeatedly, so having a solid understanding of them will help you make sense of the documentation you find.

MVC 모델 뷰 컨트롤러MVC - Model View Controller

모델 뷰 컨트롤러 또는 short 용 MVC는 Cocoa 전체에서 발견 되는 매우 일반적인 패턴입니다.Model View Controller, or MVC for short, is a very common pattern found throughout Cocoa. 자세한 논의는이 문서에서 다루지 않지만 응용 프로그램을 구성 요소로 구성 하는 방법에 대 한 간략 한 설명입니다.A detailed discussion is beyond the scope of this document, but in brief it is a way of structuring your application into components:

  • 모델 개체는 표시 되 고 조작 되는 기본 데이터를 나타냅니다 (주소록의 주소와 같이).Model objects represent the underlying data being viewed and manipulated (Like addresses in an address book)
  • 개체 보기 화면에서 지정 된 개체의 그리기를 처리 하 고 사용자 상호 작용을 처리 합니다 (화면에 주소를 표시 하는 텍스트 필드).View objects handle the drawing of a given object on screen and handling user interaction (A text field showing the address on screen)
  • 컨트롤러 개체는 모델과 뷰 간의 상호 작용을 처리 합니다.Controller objects handle the interaction between the Model and View. 사용자가 UI를 변경할 때 뷰를 업데이트 하 고 뷰를 "아래로" 변경 하 여 뷰를 업데이트 합니다.They push Model changes "up" to update the View and push "down" changes from the View when users make changes in the UI.

WPF와 같은 다른 라이브러리에서 MVVM (모델 뷰 ViewModel)에 대해 잘 알고 있는 경우 컨트롤러는 ViewModel과 비슷하지만 특정 UI 요소에 더 가깝게 바인딩되어 있는 경우가 많습니다.If you are familiar with MVVM (Model View ViewModel) from other libraries such as WPF, the Controller acts similar to the ViewModel but is often more closely bound to the specific UI elements.

자세한 내용은 다음을 참조 하세요.More details can be found here:

데이터 원본/대리자/서브클래싱Data source / delegate / subclassing

Cocoa의 또 다른 매우 일반적인 패턴은 UI 요소에 데이터를 제공 하 고 사용자 상호 작용에 반응 하는 것을 다룹니다.Another very common pattern in Cocoa deals with providing data to UI elements and reacting to user interactions. 예를 들어 NSTableView 사용 하 여 각 행에 대 한 데이터, 해당 행을 나타내는 일부 UI 요소 집합, 사용자 상호 작용에 반응 하는 일부 동작 집합, 사용자 지정의 일부를 제공 해야 합니다.Using NSTableView as an example, you need to somehow provide the data for each row, some set of UI elements that represent that row, some set of behaviors to react to user interactions, and possibly some amount of customization. 데이터 소스 및 대리자 패턴을 사용 하면 사용자가 직접 NSTableView 서브클래싱 할 필요 없이 대부분의 경우를 처리할 수 있습니다.The data source and delegate patterns let you handle most cases without having to resort to subclassing NSTableView yourself.

  • DataSource 속성에는 데이터를 사용 하 여 테이블을 채우도록 호출 되는 NSTableViewDataSource의 사용자 지정 하위 클래스 인스턴스가 할당 됩니다 (GetRowCountGetObjectValue를 통해).The DataSource property is assigned an instance of a custom subclass of NSTableViewDataSource which is called to populate the table with data (via GetRowCount and GetObjectValue).

  • Delegate 속성에는 지정 된 모델 개체에 대 한 뷰를 제공 하는 NSTableViewDelegate의 사용자 지정 하위 클래스 인스턴스가 할당 되 고 (GetViewForItem를 통해) UI 상호 작용 (DidClickTableColumn, MouseDownInHeaderOfTableColumn등을 통해)을 처리 합니다.The Delegate property is assigned an instance of a custom subclass of NSTableViewDelegate which provides the view for a given model object (via GetViewForItem) and handles UI interactions (via DidClickTableColumn, MouseDownInHeaderOfTableColumn, etc).

경우에 따라 대리자 또는 데이터 소스에 지정 된 후크를 벗어나 컨트롤을 사용자 지정 하 고 뷰를 직접 서브 클래스 할 수 있습니다.In some cases, you’ll want to customize a control in a way beyond the hooks given in the delegate or data source and you can subclass the view directly. 그러나 대부분의 경우 기본 동작을 재정의 하려면 모든 동작을 직접 처리 해야 합니다. 선택 동작을 사용자 지정 하려면 모든 선택 동작을 직접 구현 해야 할 수도 있습니다.Be careful however, in many cases overriding default behavior will then require you to handle all of that behavior yourself (customizing selection behavior may require you to implement all of the selection behaviors yourself).

Xamarin.ios에서 UITableView와 같은 일부 Api는 대리자와 데이터 소스 (UITableViewSource)를 모두 구현 하는 속성으로 확장 되었습니다.In Xamarin.iOS, some APIs, such as UITableView have been extended with a property that implements both the delegate and the data source (UITableViewSource). 이를 통해 단일 C# 클래스가 기본 클래스를 하나만 가질 수 있는 일반적인 제한 사항을 해결할 수 있으며 기본 클래스를 통해 프로토콜을 쉽게 확인할 수 있습니다.This it to work around the common limitation that a single C# class can only have one base class, and our surfacing of protocols is done via base classes.

Xamarin.ios 응용 프로그램에서 테이블 뷰로 작업 하는 방법에 대 한 자세한 내용은 테이블 보기 설명서를 참조 하세요.For more information on working with table VIews in a Xamarin.Mac application, please see our Table View documentation.

프로토콜Protocols

목표-C의 프로토콜은의 C#인터페이스와 비교할 수 있으며, 대부분의 경우 비슷한 상황에서 사용 됩니다.Protocols in Objective-C can be compared to interfaces in C#, and in many cases are used in similar situations. 예를 들어 위의 NSTableView 예제에서 대리자와 데이터 소스는 모두 실제로 프로토콜입니다.For example the NSTableView example above, both the delegate and the data source are actually protocols. Xamarin.ios는 재정의할 수 있는 가상 메서드를 사용 하 여 이러한 클래스를 기본 클래스로 노출 합니다.Xamarin.Mac exposes these as base classes with virtual methods you can override. C# 인터페이스와 객관적인 프로토콜의 주요 차이점은 프로토콜의 일부 메서드를 구현 하는 것이 선택 사항 일 수 있다는 것입니다.The primary difference between C# interfaces and Objective-C protocols is that some methods in a protocol may be optional to implement. 선택 사항인 항목을 확인 하려면 API의 설명서 및/또는 정의를 확인 해야 합니다.You’ll have to look at the documentation and/or definition of an API to determine what is optional.

자세한 내용은 대리인, 프로토콜 및 이벤트 설명서를 참조 하세요.More information please see our Delegates, Protocols and Events documentation.