Previously we learn how to release object reference: Objective-C : NSAutoreleasePool  class

           

To remove the compiler error you can just declare the instance variable yourself or request the compiler to do it for you with the @synthesize statement:

@synthesize myArray=_myArray;

 

Note that if you add the @synthesize statement you need to make sure that the name of the instance variable is consistent with the name used in the accessor method. In the getter method, we reference _myArray so we need to specify that name in the @synthesize statement. By default, if you do not specify a name for the instance variable the @synthesize statement will use the property name (without the leading underscore).

So the following would still generate a compiler error as it would create an instance variable named myArray and not the _myArray that we are using in the getter:

@synthesize myArray;  // equivalent to @synthesize myArray=myArray;

 


Customizing Accessors

Accessor methods can be customized using several property declaration attributes (e.g., (copy)). Some of the most important attributes are:

readonly - Make the property read-only, meaning only a getter will be synthesized. By default, properties are read-write. This cannot be used with the setter attribute.  

getter=getterName - Customize the name of the getter accessor method. Remember that the default is simply the name of the property. 

setter=setterName - Customize the name of the setter accessor method. Remember that the default is set followed by the name of the property (e.g., setName ). 

nonatomic - Indicate that the accessor methods do not need to be thread-safe. Properties are atomic by default, which means that Objective-C will use a lock/retain to return the complete value from a getter/setter. Note, however, that this does not guarantee data integrity across threads-merely that getters and setters will be atomic. If you're not in a threaded environment, non-atomic properties are much faster.


Dot Syntax


In addition to getter/setter methods, it's also possible to use dot notation to access declared properties. For C# developers, this should be much more familiar than Objective-C's square-bracket messaging syntax:

Person *frank = [[Person alloc] init];

frank.name = @"Frank"; // Same as [frank setName:@"Frank"];
NSLog(@"%@", frank.name); // Same as [frank name];

Note this is just a convenience-it translates directly to the getter/setter methods described previously. Dot notation cannot be used for instance methods.

  Modified On Feb-24-2018 03:25:03 AM

Leave Comment