NSLog指针语法

时间:2013-04-14 08:56:05

标签: iphone ios objective-c nslog

我对NSLog的语法有点困惑。例如,     

    NSString *nameString = @"Name";
    NSLog(@"nameString is: %@", nameString);
    
如果我的理解是正确的(很可能不是这样),那么nameString被定义为指向String的指针。我当时认为这将打印nameString保存的内存地址,而不是该地址的值。所以,如果这是真的,那么在NSLog语句中,为了获得指针的值,我们不应该使用星号表示法来访问nameString指向的内容,如下所示:     
    NSLog(@"nameString is: %@", *nameString);
    
? 自从用C编程以来已经有一段时间了,但由于Objective-C是C的超集,我认为它们的行为类似。

非常感谢您的解释!谢谢!

3 个答案:

答案 0 :(得分:15)

命令%@就像调用接收器上方法-description的“快捷方式”。对于NSString,它只显示字符串本身,因为从NSObject继承,您可以覆盖它,如果您为自己的类创建,则非常有用。在这种情况下,默认行为是打印指针的值。
如果要在字符串中打印指针的地址,只需替换为:

NSLog(@"nameString is: %p", nameString)

答案 1 :(得分:0)

我认为你只使用星号来声明一个指针。然后,您只使用您决定的名称。例如:

NSString *foo = [[NSString alloc] initWithString:@"Hello"];

NSLog(@"%@", foo);

如果我错了,请纠正我:)

答案 2 :(得分:0)

它是一个对象,NSLog是一个使用其格式说明符来确定如何处理该参数的函数。在这种情况下,说明符是%@,它告诉NSLog在对象上调用方法。 通常这将调用返回NSString的方法“description”,但它可能首先响应ToTethMethod,然后通过其他一些字符串方法。