Какой должен быть правильный формат для печати *newString
?Как сделать NSLog с переменной
NSString *newString = @"Hello this is a string!";
NSLog(@newString);
Какой должен быть правильный формат для печати *newString
?Как сделать NSLog с переменной
NSString *newString = @"Hello this is a string!";
NSLog(@newString);
@
символ просто сокращение для определения некоторых общих объектов Objective-C. @"..."
представляет собой строку (NSString
, которая отличается от обычных строк C), @[...]
представляет массив (NSArray
), @{...}
представляет собой словарь (NSDictionary
).
В первой строке вы уже указали объект NSString
, используя знак @
. newString
теперь является экземпляром NSString
.
На второй строке, вы можете просто дать это имя переменной:
NSLog(newString);
Вы могли теоретически просто дать имя переменной, но это опасный подход. Если newString
имеет какие-либо спецификаторы формата, ваше приложение может сбой/беспорядок (или доступ к чему-то, что он не должен получать), потому что NSLog
попытается прочитать аргументы, соответствующие спецификаторам формата, но аргументов не существует. Безопасным решением будет NSLog(@"%@", newString);
. Первый аргумент NSLog
теперь жестко запрограммирован и не может быть изменен. Теперь мы знаем, что он ожидает один аргумент, который мы предоставляем этому аргументу, newString
, поэтому мы в безопасности.
Поскольку вы уже указали строку и просто передали этот экземпляр NSLog
, вам не нужно снова значить знак @
.
NSLog
работает в основном как C printf
с добавлением спецификатора формата строки %@
, который предназначен для объектов. Будучи NSString
объектом, %@
правильный формат для использования:
NSString *newString = @"Hello this is a string!";
NSLog(@"%@", newString);
Ибо, как заманчиво, как это может выглядеть, НИКОГДА сделать
NSLog(newString); //NONONONONO!
, так как это страшная практика, которая может привести к неожиданным авариям (не говоря уже о проблемах безопасности).
Более подробная информация по теме: Warning: "format not a string literal and no format arguments"
Это потенциально небезопасно, и вы не должны попасть в этой привычке. 'NSLog (@"% @ ", newString);' правильно. См. Http://en.wikipedia.org/wiki/Uncontrolled_format_string. –
-1 для 'NSLog (newString)' –
не будет обрабатывать NSLOG? он все равно не принимает обычные строки C, вам нужно предоставить NSString, который в любом случае должен контролироваться. –