NSString方法initWithFormat:arguments:將va_list作爲參數。我無法弄清楚它何時會被使用(甚至不知道如何使用它)。爲什麼蘋果會在常規的initWithFormat時添加這樣的方法:更方便用戶使用?什麼時候會使用initWithFormat:arguments:?
8
A
回答
11
您可以格式參數的動態列表不能傳遞給-initWithFormat:
。例如,如果您想自己實施-stringByAppendingFormat:
而沒有-initWithFormat:arguments:
,那麼您就可以完成這項工作。隨着va_list
版本,你可以做到這一點:
- (NSString *)stringByAppendingFormat:(NSString *)format, ... {
va_list args;
va_start(args, format);
NSString * result = [self stringByAppendingString:[NSString stringWithFormat:format arguments:args]];
va_end(args);
return result;
}
0
我會說,沒有深入研究,蘋果提供NSString initWithFormat:
作爲NSString initWithFormat:arguements:
之上的實用方法,這意味着短版本最終只會調用較長的版本。
還有[的NSString stringWithFormat:],可以返回一個autoreleased的NSString,節約了您的通話alloc
如果你不需要串繞很長時間。
3
當您自己的函數或方法使用可變參數時非常有用,因爲在這種情況下,不可能使用vanilla initWithFormat:
方法。
例如,下面的(無用)例如片段:
void log(NSString* format, ...)
{
va_list arguments;
va_start(arguments, format);
// impossible:
// NSString* formattedString = [[NSString alloc] initWithFormat: ???];
// possible
va_list argsCopy;
va_copy(argsCopy, arguments);
NSString* formattedString = [[NSString alloc] initWithFormat:format arguments:argsCopy];
// do something cool with your string
NSLog(@"%@", formattedString);
va_end(argsCopy);
va_end(arguments);
}
相關問題
- 1. 什麼時候會使用ObjectInputStream.readUshared()與.readObject()?
- 2. 什麼時候會想要使用OneTuple?
- 3. 什麼時候會使用.fini_array部分?
- 4. 什麼時候應該使用AWS,什麼時候不使用
- 5. intn_t什麼時候使用它,什麼時候不使用
- 6. 什麼時候使用__proto__和什麼時候使用原型
- 7. 什麼時候使用Ruby和什麼時候使用PHP
- 8. 什麼時候會發生?
- 9. 什麼時候使用uncaught_exception?
- 10. 什麼時候使用vtable?
- 11. 什麼時候使用sIFR?
- 12. JOINS什麼時候使用?
- 13. 什麼時候使用Dispose
- 14. 什麼時候使用ANTLR
- 15. 什麼時候使用StringIO?
- 16. Railties - 什麼時候使用
- 17. 什麼時候使用SpringApplicationBuilder?
- 18. 什麼時候使用GWT,什麼時候不需要
- 19. ZF2什麼時候使用getServiceLocator()什麼時候不到
- 20. SQL Server CASE什麼時候不使用CASE什麼時候
- 21. 什麼時候和爲什麼我會在C++中使用abs
- 22. 什麼時候會話數據可用?
- 23. 你什麼時候會用attr_writer?
- 24. 什麼時候會調用ctor?
- 25. 什麼時候會調用[UIViewController disablesAutomaticKeyboardDismissal]?
- 26. 什麼時候使用信號和插槽,什麼時候不使用
- 27. 什麼時候應該使用Import-Package,什麼時候應該使用Require-Bundle?
- 28. 什麼時候使用適配器和什麼時候使用inflater
- 29. 什麼時候使用for-each和什麼時候在xslt中使用apply-templates?
- 30. 什麼時候適合使用雙向關聯,什麼時候不適用?
偉大的答案,謝謝。 – calvinlough 2010-02-11 03:08:58