> 
> **Possible Duplicate:**  
> 
> [How does an underscore in front of a variable in a cocoa objective-c class work?](https://stackoverflow.com/questions/822487/how-does-an-underscore-in-front-of-a-variable-in-a-cocoa-objective-c-class-work) 
> 
> 
> 

I have been very confused with using self or underscore with variable name after synthesizing it like below:

```
In .h file:
@property(nonatomic, strong) NSMutableArray *users;

In .m file:
@synthesize users = _users;

```

Based on my understandings when I use `self.users`, OS will make sure to release previously allocated memory in set method so we don't need to take care explicitly.

`_users` is an instance variable for users and should be normally used while accessing the users variable. If I use `_users` to change its value then it won't fire KVO delegate which will not notify a class observing users value change.

Moreover, `self.users` allows differentiating dummy variable in the method name like below,

```
- (void)assignUsers:(NSMutableArray*)users {
      self.users = users;
}

```

Could someone please tell me if there is anything that I understood wrong or missing while using `_users` or `self.users`?