I think it helps to consider how properties are (or might be) implemented by the compiler.
When you write self.users = array;
the compiler translates this to [self setUsers:array];
When you write array = self.users;
the compiler translates this to array = [self users];
@synthesize
adds an ivar to your object (unless you added it yourself), and implements the -users
and -setUsers:
accessor methods for you (unless you provide your own)
If you're using ARC, -setUsers:
will look something like:
- (void)setUsers:(NSArray *)users
{
_users = users; // ARC takes care of retaining and release the _users ivar
}
If you're using MRC (i.e. ARC is not enabled), -setUsers:
will look something like*:
- (void)setUsers:(NSArray *)users
{
[users retain];
[_users release];
_users = users;
}
* - Note that this is a simplified, nonatomic implementation of -setUsers: