The first gets access to ivar through the getter method. The second directly refers to ivar. Since this is a simple, synthesized property, there are not many differences, except that the former calls an additional method call. However, if the property was atomic or dynamic, or the getter method was complex, there would be a difference in the fact that the first would be actually atomic and the second not, and the first would actually trigger any complex logic in and the second not.
Simply put, the compiler rewrites the first call:
[[self name] aMethod]
and the second call is simply left as is.
source share