1

我试图包装 NSLog 函数只是为了在每次记录某些内容时添加一些信息,但是我遇到了问题。

NSLog 声明是

void NSLog(NSString *format, ...) __attribute__((format(__NSString__,1,2)))

这允许在调用中有多个参数

NSLog(@"first %@ second %@ third %d,string,string,number);

我的声明功能类似

  void LogUtil(id sender, int level, NSString *str, ...) __attribute__((format(__NSString__,3,4)))

并且实施只是

void LogUtil(id sender, int level, NSString *str, ...){
  if(level>=LEVEL){
    NSLog(@"<%@> %@",sender,str);
  }
}

所以我可以称之为

NSLog(self, 1, @"first %@ second %@ third %d,string,string,number);

但在这种情况下,不会评估属性。

所以,我想我必须在我的实现中做一些事情来用参数格式化 str 但是如何呢?

提前谢谢

4

2 回答 2

2

对此有完整的描述: http ://cocoawithlove.com/2009/05/variable-argument-lists-in-cocoa.html

于 2010-08-26T08:52:36.157 回答
2

谢谢...这是有效的实施

    void LogUtil(id sender, int level, NSString *str, ...){

      if(level>=LEVEL){
        va_list args;
        va_start(args,str);
        NSString *format=[[NSString alloc] initWithFormat:str arguments:args];
        va_end(args);  
        NSLog(@"<%@> %@",sender,format);
        [format release];
      }

    }
于 2010-08-26T09:19:47.177 回答