我对 NSLog 的语法有点困惑。例如,
NSString *nameString = @"名称"; NSLog(@"nameString 是: %@", nameString);如果我的理解是正确的(很可能不是),那么 nameString 被定义为指向 String 的指针。我当时认为这会打印 nameString 保存的内存地址,而不是该地址的值。因此,如果这是真的,那么在 NSLog 语句中,为了获取指针的值,我们是否需要使用星号表示法来访问 nameString 所指向的内容,如下所示:
NSLog(@"nameString 是: %@", *nameString);? 自从用 C 编程以来已经有一段时间了,但由于 Objective-C 是 C 的超集,我认为它们的行为会类似。
如有解释,将不胜感激!谢谢!
命令
%@
就像“快捷方式”一样,调用接收器上的方法-description
。对于 NSString
它只显示字符串本身,因为它是从 NSObject
继承的,您可以覆盖它,如果您为自己的类创建,则非常有用。在这种情况下,默认行为是打印指针的值。
如果你想打印字符串中指针的地址,只需替换为:
NSLog(@"nameString is: %p", nameString)
我认为你使用星号只是为了声明一个指针。然后,您只能使用您决定的名称。例如:
NSString *foo = [[NSString alloc] initWithString:@"Hello"];
NSLog(@"%@", foo);
如果我错了请纠正我:)
它是一个对象,而 NSLog 是一个函数,它使用其格式说明符来确定如何处理参数。 在本例中,说明符是 %@,它告诉 NSLog 调用对象上的方法。 通常,这将调用方法“description”,该方法返回一个 NSString,但它可能首先执行respondsToMethod,然后转向其他一些字符串方法。