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. 什麼時候會使用malloc over zmalloc?
- 2. 什麼時候會使用ObjectInputStream.readUshared()與.readObject()?
- 3. 什麼時候會想要使用OneTuple?
- 4. 什麼時候會使用.fini_array部分?
- 5. 什麼時候會使用mysqli_ping?
- 6. 什麼時候使用__proto__和什麼時候使用原型
- 7. 什麼時候應該使用AWS,什麼時候不使用
- 8. intn_t什麼時候使用它,什麼時候不使用
- 9. 什麼時候使用Ruby和什麼時候使用PHP
- 10. 什麼時候使用ByteString,什麼時候不使用?
- 11. 什麼時候會發生?
- 12. 什麼時候應該使用async/await,什麼時候不用?
- 13. 什麼時候使用sIFR?
- 14. 什麼時候使用MessageDigest.reset()
- 15. 什麼時候使用VK_IMAGE_LAYOUT_GENERAL
- 16. 什麼時候使用SVDRecommender
- 17. JOINS什麼時候使用?
- 18. 什麼時候使用SpringApplicationBuilder?
- 19. 什麼時候使用StringIO?
- 20. 什麼時候使用Dispose
- 21. Railties - 什麼時候使用
- 22. 什麼時候使用uncaught_exception?
- 23. 什麼時候使用ANTLR
- 24. 什麼時候使用vtable?
- 25. SQL Server CASE什麼時候不使用CASE什麼時候
- 26. ZF2什麼時候使用getServiceLocator()什麼時候不到
- 27. 什麼時候使用GWT,什麼時候不需要
- 28. 什麼時候和爲什麼我會在C++中使用abs
- 29. 什麼時候會調用[UIViewController disablesAutomaticKeyboardDismissal]?
- 30. 你什麼時候會用attr_writer?
偉大的答案,謝謝。 – calvinlough 2010-02-11 03:08:58