什麼應該是正確的打印格式*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
實例。
在第二行,你可以給它的變量名:
您可以理論上只需要給變量名,但它是一個危險的方法。如果newString
具有任何格式說明符,則您的應用可能會崩潰/弄亂(或訪問它不應該訪問的內容),因爲NSLog
會嘗試讀取與格式說明符對應的參數,但參數不存在。安全的解決方案是NSLog(@"%@", newString);
。 NSLog
的第一個參數現在是硬編碼的,不能更改。我們現在知道它會期待一個單一的論點,我們正在提供這個論點,newString
,所以我們是安全的。
因爲您已經指定了一個字符串,只是將該實例傳遞給NSLog
,您不需要再次使用@
符號。
NSLog
幾乎可以作爲C printf
,並增加了%@
字符串格式說明符,這是爲對象定義的。作爲NSString
對象,%@
是正確的格式使用:
NSString *newString = @"Hello this is a string!";
NSLog(@"%@", newString);
對於作爲誘人的,因爲它可以看看,NEVER做
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,它應該被控制。 –