title: Is this the proper use of Objective-C protocols?
body: <p>I'm building an app with, for the purposes of this question, three custom classes: <code>AppDelegate</code>, <code>ListWindowController</code> and <code>ViewOptionsWindowController</code>. <code>AppDelegate</code> keeps retains properties of the single instances of <code>ListWindowController</code> and <code>ViewOptionsWindowController</code>.</p>
  
  <p>When the user selects a particular menu item, an action in <code>AppDelegate</code> is executed that instantiates the <code>ViewOptionsWindowController</code>. Changes made in this controller's window need to be reflected in <code>ListWindowController</code>'s window (either adding or removing a column from the window's table view).</p>
  
  <p>So, I've defined a protocol, <code>ViewOptionsChanged</code>, which has two required methods, <code>-addColumn</code> and <code>-removeColumn</code> (with parameters to indicate what to add or remove). I've indicated that <code>ListViewController</code> conforms to this protocol, and when instantiating <code>ViewOptionsWindowController</code> am passing <code>AppDelegate</code>'s instance of <code>ListViewController</code>. The declaration of <code>ViewOptionsWindowController</code>'s init method is:</p>
  
  <pre><code>- (id)initWithListController:(id &lt;ViewOptionsChanged&gt;)listController;
  </code></pre>
  
  <p>so that the only facts that <code>ViewOptionsWindowController</code> knows about the <code>listController</code> parameter is that it conforms to this protocol.</p>
  
  <p>So, my question is, is this the proper use of Objective-C protocols? Or would some other design pattern be more appropriate?</p>