我对NSLog的语法有点困惑。例如,
NSString *nameString = @"Name"; NSLog(@"nameString is: %@", nameString);如果我的理解是正确的(很可能不是这样),那么nameString被定义为指向String的指针。我当时认为这将打印nameString保存的内存地址,而不是该地址的值。所以,如果这是真的,那么在NSLog语句中,为了获得指针的值,我们不应该使用星号表示法来访问nameString指向的内容,如下所示:
NSLog(@"nameString is: %@", *nameString);? 自从用C编程以来已经有一段时间了,但由于Objective-C是C的超集,我认为它们的行为类似。
非常感谢您的解释!谢谢!
答案 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,然后通过其他一些字符串方法。