The only reason to access a property directly via the underscore is to bypass the getter/setter. Functionally there generally won't be a huge difference in the majority of cases, but there are a number of advantages to accessing properties via the setters/getters (i.e. self), including:
- Key Value Observing - if you do want to observe when a property value is changed, it'll only be possible if it's done via a setter (including default setter).
- Versatility in the future - If you primarily access a property via self, you then have the option of creating a getter/setter down the track without having to change all your references to the property.
Bottom line, accessing and setting a property directly (via _) simply limits your options for no gain.
Edit: As Willeke has pointed out, accessing a property directly is technically faster than doing so via an accessor (via self). For the most part this difference is negligible, but there are feasibly scenarios where it's relevant.