2009-07-20 2 views

ответ

3

Так как NSLog принимает NSString в качестве аргумента он использует спецификатор формата NSString. Это практически идентично обычным спецификаторам printf. Кроме того, спецификатор %@ не ограничивается объектами NSString, но предназначен для любых объектов Objective-C. База NSObject класс предоставляет общее описание объекта, состоящего из его класса и его адреса, но многие объекты будут предоставлять информацию, относящуюся к их типу, такую ​​как классы коллекции (NSArray, NSDictionary), которые будут снабжать красиво сформированным дампом их содержимого. Вы можете предоставить это для своих собственных объектов, которые вы создаете, переопределяя -description (см. Документацию для получения дополнительной информации, включая возможность локализации).

Смотрите также: NSString Format Specifiers

+0

«% @» недействителен для любого объекта Objective-C, только объекты, которые отвечают «описанию». Если бы я должен был создать свой собственный объект, происходящий из Object (объявленный в «objc/Object.h»), он не обязательно будет совместим с «% @». – dreamlax

+0

Это правда, даже если это то, что документация 'NSString Format Specifiers 'определяет его как. Даже добавить 'description' недостаточно, если вы создаете свой собственный класс root. – johne

3

Это обычная строка формата C с расширением% @ (который печатает любой NSObject, запрашивая его метод -description, а не только NSStrings).

Вы можете увидеть обзор в PRINTF manpage

+0

Это нормальная строка формата C, за исключением (злого)% n спецификатора преобразования. Он не работает в строках формата object-C. –

Смежные вопросы