Objective C - Определение макроса для вызова метода?

Я хочу определить макрос, чтобы вызвать следующее: возможно ли это? Я также хочу, чтобы он принял строку формата.

- (void)logString:(NSString *)string withLogLogLevel:(LogLevel)logLevel
{
   // Sav log to file
}

DLog("text");
[Logger logString:text withLogLevel:LogLevelDebug];

ILog("text");
[Logger logString:text withLogLevel:LogLevelInfo];

ELog("text");
[Logger logString:text withLogLevel:LogLevelInfo];

Ответ 1

Предполагая, что logString:withLogLevel: принимает один строковый параметр в дополнение к уровню журнала, это должно быть возможно:

#define DLog(x) [Logger logString:(x) withLogLevel:LogLevelDebug]

Обратите внимание на круглые скобки вокруг параметра макроса, это полезно, когда макросы вызываются с составными выражениями.

Предполагая, что logger принимает объекты NSString, а не строку C, вы должны использовать макрос следующим образом:

DLOG (@ "Текст" );

Однако в этом случае непонятно, почему можно предпочесть макрос для простого вызова функции:

void DLog(NSString *str) {
    [Logger logString:str withLogLevel:LogLevelDebug];
}