title: Controlling access to instance variables in Objective-C
body: <p>From all code I've seen, almost always is used something like this for property scope definition:</p>
  
  <p><strong>Class extension</strong></p>
  
  <pre><code>/*We declare the class extension*/
  @interface  MyClass () 
  
  @property (nonatomic, retain) Type *aPrivateProperty; 
  - (void)aPrivateMethod;
  
  @end
  
  /*
  We can use the main implementation block to implement our properties
  and methods declared in the class extension.
  */
  @implementation MyClass
  
  /*Therefore we can use synthesize ;-)*/
  @synthesize aPrivateProperty;
  
  - (void)aPrivateMethod {        
      //Some code there
  }
  
  @end
  </code></pre>
  
  <p>But this is (from what I've seen) rarely used:</p>
  
  <pre><code>@interface MyClass : NSObject {
      iVar *aProtectedIVar;
      @public
      iVar *aPublicIVar;
      iVar *aSecondPublicIVar;
      @protected
      iVar *aSecondProtectedIVar;
      @private
      iVar *aPrivateIVAr;
  }
  
  @end
  </code></pre>
  
  <p>Why modifiers like @private, @protected and @public are not used so much in Objective-C if they are available?</p>