title: Proper way to use instance variables/property/synthetize with ARC
body: <p>What is the proper way to work with instance variables (declared on interface), their <code>@property</code> and <code>@synthesize</code>, when working in ARC project? What I now do is following:</p>
  
  <p>SomeClass.h:</p>
  
  <pre><code>@interface SomeClass : NSObject {
    NSString *someString;
  }
  @property(nonatomic, copy) NSString* someString;
  </code></pre>
  
  <p>and SomeClass.m:</p>
  
  <pre><code>@implementation SomeClass
  
  @synthesize someString;
  
  - (void)someMethod {
    self.someString = @"Foobar";
  }
  </code></pre>
  
  <p>The thing is that there are other approaches that works, like using just the @property:</p>
  
  <p>SomeClass.h:</p>
  
  <pre><code>@interface SomeClass : NSObject
  @property(nonatomic, copy) NSString* someString;
  </code></pre>
  
  <p>Accessing the <code>someString</code> without <code>self</code>:</p>
  
  <p>SomeClass.m:</p>
  
  <pre><code>@implementation SomeClass
  
  @synthesize someString;
  
  - (void)someMethod {
    someString = @"Foobar";
  }
  </code></pre>
  
  <p>etc. I'm new to Objective-c, I'm used to Java. What is the proper way to work with attributes then? I understand that special cases will have special behavior, but what is the best approach in general? (by general I mean I want to access the variable from the class itself and from "outside" and I want ARC to still work correctly, eg. I don't have to worry about memory leaks)</p>