title: Inherited properties and synthesizing in Objective-C
body: <p>I have the following class and subclass:</p>
  
  <pre><code>@interface NSHigh : NSObject
  @property (nonatomic, strong) NSArray *array;
  @end
  @implementation NSHigh
  -(NSArray*)array
  {
      _array = [[NSArray alloc] init];
      return _array;
  }
  @end
  
  @interface NSLow : NSHigh
  @end
  @implementation NSLow
  /* synthesizing makes the assertion FAIL. NO synthesizing makes the assertion PASS */
  @synthesize array;
  @end
  </code></pre>
  
  <p>Then I run this code somewhere:</p>
  
  <pre><code>NSLow *low = [[NSLow alloc] init];
  assert(low.array);
  </code></pre>
  
  <p>So, apparently, if in the subclass <code>NSLow</code> I synthesize the array property, then the getter from the super class does not get called, and the assertion fails. </p>
  
  <p>If I do not synthesize, then the superclass getter is called, and the assertion passes.</p>
  
  <ol>
  <li>Why does this happen?</li>
  <li>How would I access the array instance variable in the <code>NSLow</code> subclass without calling <code>self.array</code> every time?</li>
  </ol>