Если вы обращаетесь к свойству из другого класса, вы всегда должны использовать метод доступа или точечную запись. Это просто базовая гигиена. В маловероятном случае, когда вы обнаружите, что это вызывает узкое место в цикле или что-то в этом роде, вы можете подумать о каком-то индивидуальном решении в этой точке.
Если вы обращаетесь к переменной из в классе, я думаю, что можно получить доступ к ivar напрямую, а не через свойство , если вы получаете значение . Тем не менее, если вы устанавливаете значение, вы всегда должны использовать свойство, как во избежание утечек памяти, так и потому, что установщик может иметь логику, которая должна выполняться.
Итак:
CGSize sz = [self size]; //ok
CGSize sz = self.size; //ok
CGSize sz = _size; //ok, but be careful
[self setSize:sz]; //ok
self.size = sz, //ok
_size = sz; // DON'T EVER DO THIS!
Однако, если у вас есть ивар, у которого даже нет свойства, связанного с ним, вам не нужно говорить, что он имеет к нему прямой доступ (у вас нет большого выбора ...). Лично я обычно объявляю свойства для всех ivars, кроме некоторых флагов или счетчиков с необъектными типами, но многие люди этого не делают.