Запись [[self dataForTable] count] не не относится непосредственно к iVar. Там происходит что-то закулисное ...
Если вы используете ivar в своем коде без self, это прямой доступ к ivar. Если вы используете [self someIvarName] или self.someIvarName, вы фактически отправляете сообщение объекту (который является self). Среда выполнения пытается разрешить это сообщение и будет использовать один из нескольких механизмов: если вы определили метод с совпадающим именем, этот метод будет использоваться, если такого метода (или свойства) не существует, то кодирование значения ключа по умолчанию будет использовать ivar с одинаковым именем.
Что касается воздействия, это будет зависеть от вашего кода. Например, если ваша собственность является оставленной собственностью (в отличие от назначенной), существует очень существенная разница между:
someVar = nil
и
self.someVar = nil
Синтезированный установщик должным образом выпустит someVar, прежде чем установить его в ноль, тогда как в первом примере у вас теперь утечка памяти. Это только один из примеров различий.