У меня нет четкого представления о объектной переменной переменной аргумента. Я хочу написать функцию, которая примет параметр типа nlsog, но когда-нибудь я буду использовать NSLog внутри этой функции. Как я могу это сделать?NSLog внутри функции переменных аргументов
-(void) printStatus:(NSString*)status, ...
{
// I want use use NSLog with all these parameter here.
// some gui logging also happens here
}
Calls будет так,
[self printStatus:@"status"];
или
[self printStatus:@"Staus: %@", someObject];
Вместо использования NSLog, я хочу использовать printStatus. Когда мне нужно переключить ведение журнала консоли на запись в GUI, я могу сделать это, только изменив функцию printStatus, не меняя все места внутри моего кода.
Или использовать DLOG, как я использую здесь,
#ifdef DEBUG
# define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
# define DLog(...) /* */
#endif
спасибо. но я использовал макрос DLog, где я использовал NSLog. Есть ли способ использовать NSLog? #ifdef DEBUG # define DLog (fmt, ...) NSLog ((@ "% s [Line% d]" fmt), __PRETTY_FUNCTION__, __LINE__, ## __ VA_ARGS__) #else # define DLog (...)/* */ #endif – karim
Единственный способ передавать переменные аргументы в функции/методы использует 'va_list'. Вот почему большинство библиотек предлагают альтернативу '* v', которая принимает' va_list'. Поэтому вы должны создать «DLogv», который вызывает «NSLogv», и перенаправлять аргументы на это. –
Спасибо. Я думал о втором случае. Но я не был уверен в первом случае. Поскольку при создании строки во втором случае мне нужно вызвать va_start (args, status), иначе args не будет использоваться для использования с NSString. Не так ли? – karim