Diferencia entre acceder a métodos de propiedad y campos de clase (Objective-C)

Supongamos que tengo este código:

@interface Foo : NSObject {
    Bar *bar;
}

@property (retain, nonatomic) Bar *bar;

@end

Al usar este campo / propiedad, ¿hay alguna diferencia entre las líneas:

[self.bar doStuff];

y

[bar doStuff];

?

Al realizar la asignación, el método de propiedad realizará la retención correcta, pero ¿qué pasa con el acceso de lectura a la propiedad, como se describe anteriormente? ¿Hay alguna diferencia?

Respuestas a la pregunta(4)

Su respuesta a la pregunta