Когда будет использоваться initWithFormat: arguments:? - PullRequest
8 голосов
/ 11 февраля 2010

Метод NSString initWithFormat: arguments: принимает va_list в качестве аргумента. Я не могу понять, когда это будет использоваться (или даже как это использовать). Зачем Apple добавлять такой метод, когда обычный initWithFormat: гораздо более удобный для пользователя?

Ответы [ 3 ]

11 голосов
/ 11 февраля 2010

Нельзя передать динамический список аргументов формата в -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;
}
3 голосов
/ 11 февраля 2010

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

Я бы сказал, не вдаваясь в подробности, что Apple предоставляет NSString initWithFormat: в качестве служебного метода поверх NSString initWithFormat:arguements:, что означает, что короткая версия просто вызывает более длинную.

Существует также [NSString stringWithFormat:], которая может возвращать автоматически освобожденную NSString, сохраняя вам вызов alloc, если строка долго не нужна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...