Reputation: 247
I am so confused between self and underscore to access the property in Objective c, whenever we create property, its getter-setter automatically generated. So we can access the same property with self.property and same as _property. In my opinion, there shoulb be some difference which i am not getting. PLease tell me with examples.
Upvotes: 13
Views: 8661
Reputation: 8134
The underbar (underscore) version is the actual instance variable, and should not be referenced directly. You should always go via the property name, which will ensure that any getter/setter actions are honoured.
So if you code _property = 4
, you have directly set the variable. If you code self.property = 4
, you are effectively making the method call [self setProperty:4]
, which will go via the setter (which might do something such as enforce property having a max value of 3, or updating the UI to reflect the new value, for example).
Edit: I though it was worth mentioning that the setter (setProperty
) will issue a _property = 4
internally to actually set the instance variable.
Upvotes: 38
Reputation: 1504
Let's say you have a property defined as follows:
@property (nonatomic,strong) NSString* name;
The getters and setters of the name property are automatically generated for you.Now, the difference between using underscore and self is that:
self.name =@"someName"; // this uses a setter method generated for you.
_name = @"someName"; // this accesses the name property directly.
The same applies for getting the name property;
Upvotes: 6
Reputation: 1212
when you are using the self.XX, you access the property via the setter or getter.
when you are using the _XX, you access the property directly skip the setter or getter.
Upvotes: 11