你說:
[我是]有點c關於如何定義功能stringWithFormat
或其簽名。
如果命令 - 點選在你的代碼stringWithFormat
,它會帶你直接到它的聲明(你可以點擊「返回」按鈕,返回到你的代碼)。無論如何,stringWithFormat
定義如下:
+ (instancetype)stringWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);
那些省略號(...
)表明它是一個「variadic function」,即它需要的由逗號分隔的參數的可變長度列表。這是一個C編程模式,它也被合併到Objective-C中。
在如果你想知道,這是NS_FORMAT_FUNCTION
一絲向編譯器,所述第一參數(1
)是printf
風格格式字符串(或者更準確地說,稍微更豐富的再現該NSString
用途),並且該參數從第二個參數(2
)開始應該與格式字符串中顯示的內容匹配。這讓編譯器檢查你的參數列表,看它是否與格式字符串匹配。
,他們覺得有必要增加這個特殊的邏輯printf
風格的參數其實是一個線索可變參數參數的更深層次的問題,這一事實:隨着printf
風格的情況外,很難確保傳遞給參數該函數匹配函數期望的內容。
因此,通常您只會看到可變方法聲明,其中傳遞給方法的參數數量是可變的,並且它有一個printf
樣式的格式字符串。 (從技術上講,你可以在任何情況下使用它,但是在這些情況下,通常有更好的方法,比如傳遞一個數組。事實上,如果你看看Apple的新Cocoa API,他們需要可變數量的參數,他們一般傳遞一個數組,而不是使用一個可變的模式,你會在一些上了年紀的API見)
所以,你說得對,我們一般調用的方法等等等等。
[objectName funcName:firstValue secondParameterName:secondValue thirdParameterName:thirdValue];
但是,在特殊情況下,您可以聘請variadic functions。
來源
2016-03-19 18:14:49
Rob
http://www.apeth.com/iOSBook/ch03.html#_parameter_lists - http://publications.gbdirect.co.uk/c_book/chapter9/stdarg.html – matt
'stringWithFormat'是一個Objective-C方法。 'NSLog'是一個C函數。 – matt