title: Override UIViewController.view with specific type
body: <p>Let's consider an application with highly customized or complex views. </p>
  
  <p>We'll have a specific kind of view-controller sending methods to a specific kind of UIView, where the UIView is itself composed of a number of other views. </p>
  
  <p>The view should have a rich, domain-specific interface, allowing the controller to act is a thin "glue" layer between it and a similarly rich model. </p>
  
  <p><strong>So we override our controller's view property as follows:</strong></p>
  
  <pre><code>@interface PlaybackViewController : UIViewController&lt;StageLayoutDelegate, ControlPanelDelegate&gt;
  {
      NSMutableArray* _sections;
      LightingMode _lightingMode;
  }
  
  @property (nonatomic, strong) PlaybackView* view; // &lt;------ Specific type of view
  
  #pragma mark - injected
  @property (nonatomic, strong) id&lt;OscClient&gt; oscClient;
  @property (nonatomic, strong) AbstractStageLayoutView* stageLayoutView;
  
  @end
  </code></pre>
  
  <p>Ovverriding makes sense over defining another accessor, and I can just send messages to the specific type of UIView without having to cast. </p>
  
  <p><strong>Problem:</strong> The only problem is that it results in a compiler warning: </p>
  
  <p><em>property type 'PlaybackView *' is incompatible with type 'UIView *' inherited from 'UIViewController'</em></p>
  
  <p>. . and I like to build code that doesn't have any warnings. This way a valid warning doesn't get missed by being buried amongst other warnings. </p>
  
  <p><strong>Question:</strong></p>
  
  <ul>
  <li>Is there a way to suppress this <em>particular</em> warning?</li>
  <li>Why is this part of the default settings, when most modern OO languages will happily allow overriding a property or method in a sub-class so that it returns a more specific sub-class of the type declared in the super-class? </li>
  </ul>