'Difference between self and underscore to access the property in objective c?

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.

ios


Solution 1:[1]

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.

Solution 2:[2]

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.

Solution 3:[3]

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;

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Joyal Clifford
Solution 3 Lehlohonolo_Isaac