NSLog指针语法

问题描述 投票:0回答:3

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

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

如有解释,将不胜感激!谢谢!

iphone ios objective-c nslog
3个回答
16
投票

命令

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

如果你想打印字符串中指针的地址,只需替换为:

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

0
投票

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

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

NSLog(@"%@", foo);

如果我错了请纠正我:)


0
投票

它是一个对象,而 NSLog 是一个函数,它使用其格式说明符来确定如何处理参数。 在本例中,说明符是 %@,它告诉 NSLog 调用对象上的方法。 通常,这将调用方法“description”,该方法返回一个 NSString,但它可能首先执行respondsToMethod,然后转向其他一些字符串方法。

© www.soinside.com 2019 - 2024. All rights reserved.