Брайан прав в том, что вам нужно раскрывать свойства элемента пользовательского интерфейса, только если доступ к ним необходим из другого экземпляра или другого класса целиком. Это обычно является признаком проблемы архитектурного дизайна, но не всегда.
Чтобы ответить на два последних вопроса:
Замедляет ли использование второго решения (для всех указателей на элементы интерфейса) производительность приложения?
Нет. Не более чем добавление метода с именем -doSomethingReallyComplicated замедляет приложение, если этот метод никогда не вызывается. Он может замедлять запуск, имея кучу неиспользуемого кода (тем самым увеличивая размер двоичного кода без причины), и, безусловно, замедляет время компиляции, но не влияет на производительность приложения во время выполнения.
Когда целесообразно использовать второй способ вместо первого?
Как сказал Брайан, вы открываете элемент пользовательского интерфейса как свойство (через @synthesize или метод с ручным кодированием), когда вам нужно получить к нему доступ снаружи данного экземпляра этого класса. Опять же, необходимость сделать это обычно является признаком проблемы проектирования.