foo = self.var;
self.var = foo;
концептуально идентичен
foo = [self var];
[self setVar: foo];
Таким образом, используя точечную запись, вы действительно отправляете сообщения себе.
foo = var;
var = foo;
концептуально совпадает с
foo = self->var;
self->var = foo;
То есть не использовать точечную запись для доступа к переменной экземпляра - это то же самое, что обрабатывать себя как указатель на структуру C и получать прямой доступ к полям структуры.
Практически во всех случаях предпочтительно использовать свойство (либо нотацию с точкой, либо нотацию отправки сообщения). Это потому, что свойство может быть сделано для автоматического выполнения необходимых сохранения / копирования / выпуска, чтобы остановить утечки памяти. Кроме того, вы можете использовать значение ключа, наблюдая со свойством. Также подклассы могут переопределять свойства для обеспечения собственной реализации.
Существуют два исключения для использования свойств при установке ивара в init и при освобождении его в dealloc. Это связано с тем, что вы почти наверняка хотите избежать случайного использования переопределения подкласса в этих методах и не хотите инициировать какие-либо уведомления KVO.