Это полезно, когда ваша собственная функция или метод использует переменные аргументы, поскольку в этом случае невозможно использовать метод 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);
}