Объекты в цели c представлены в виде указателей на структуры c, которые содержат все данные объекта. Если бы объект был реальной структурой (а не указателем на нее), это сделало бы такие вещи, как передача объектов в качестве параметров метода, гораздо менее эффективными. Итак, как только вы инициализируете объект:
NSString *aString = /* initial value */;
вы почти всегда будете просто использовать указатель aString, а не разыменовывать его (т.е. * aString).
Токен% @ в функции NSLog () ожидает тип указателя и вызывает метод описания для этого объекта, чтобы определить, какое значение вывести. Когда метод описания вызывается для объекта NSString, он возвращает получателя, поэтому токен% @ заменяется содержимым строки в выводе.