I have personally settled on using an underscore prefix for ivars, and this kind of synthesize
@synthesize name = _name;
That way I don’t mix them up. The major issue with not using self is that this code
_name = ...
is very different from
self.name = ...
When the @property uses the retain option. The first does not retain the object, and the second calls the synthesized setter that retains.
The only time it makes a big difference is with assigning, so I tend to use self.
all of the time so I make sure I do it on assigns.