как правило, вы будете использовать их, потому что:
1) свойство принадлежит к общедоступному интерфейсу класса
используется, когда классу необходимо предоставить данный метод. недостатком является то, что клиенты и подклассы могут злоупотреблять общедоступным интерфейсом (все методы objc являются общедоступными, если они видны), если вы не будете осторожны, чтобы скрыть эти детали (что иногда является болью). иногда вы вынуждены делать все возможное, чтобы получить интерфейс класса, который вам нужен (с должным уровнем видимости).
2) вы хотите автоматически сгенерированные средства доступа
реализация неспециализированных средств доступа утомительна и подвержена ошибкам. лучше сэкономить время и позволить компилятору сгенерировать их для вас.
3) документировать поведение
иногда лучше написать @property (copy) NSString * title;
, чем перезаписывать ожидаемый результат.
4) более строгое соответствие селектора с точечным синтаксисом
компилятор выполняет более строгое сопоставление селектора. Предпочитаю по возможности перехватывать ошибки / проблемы при компиляции.
5) заставить подклассы использовать их вместо непосредственной обработки иваров
objc ivars защищены по умолчанию. вам часто нужно, чтобы они были частными (в зависимости от того, как класс используется и распространяется, или просто для того, чтобы убедиться, что подкласс правильно использует базовый класс).
есть масса причин для этого. нарезка резьбы и техническое обслуживание - самые большие.
если вы объявите ivar как частный и предоставите свойство для использования подклассом, то подкласс будет вынужден использовать это свойство в своей реализации (хотя есть способы обмануть) вместо предоставления им прямого доступа к ivar .
так что ... в конечном итоге это зависит от ваших предпочтений и деталей реализации вашего класса в сочетании с используемыми вами интерфейсами. я не думаю, что здесь есть жесткое и быстрое правило - меньшее зло и удобство являются ключевыми мотивами.