Я все еще довольно плохо знаком с языком, но похоже, что @ указывает, что передаваемая / создаваемая переменная является NSObject или директивой компилятора.
Как уже упоминалось выше, если вы используете его так:
@ "SOMETEXT"
вы создаете экземпляр объекта NSString и устанавливаете для текста этого объекта значение someText. Если вы посмотрите на хороший старый спецификатор формата в стиле C, например:
... "Это некоторый текст, и это число с плавающей точкой:% f", myFloat);
Вы создаете некоторый текст и говорите компилятору поместить строковое представление с плавающей запятой myFloat в строку. % @ - это спецификатор формата, такой же, как% f,% d,% c,% s и любой другой спецификатор формата, к которому вы привыкли. Однако, если вы используете% @ следующим образом:
... "Это некоторый текст, и это объект:% @", myObject];
То, что вы делаете, - это (я считаю) сообщение компилятору, что myObject является объектом и что вы хотите, чтобы он включал выходные данные метода описания (т. Е. [MyObject description]) в строку, которую создание.