2014-01-05 33 views
2

以下片断输出值10,的NSString和指针

int x = 10; 
    int *y = &x; 
    NSLog(@"Value pointed by y = %d",*y); 

但柜面的指针NSString的下面,为什么我们不能用*作为变量的前缀名称检索它指向的值。

NSString *country = @"USA"; 
    NSLog(@"Value pointed by country: %@",country); 

让我知道如果我失去了一些东西。谢谢。

+0

因为在第二种情况下,您使用'%@',这意味着“使用提供的指针调用'description'并打印您从该调用中获得的NSString。” –

回答

2

您可以将此视为纯粹的语法约定 - 这是将Objective-C保持为C语言的纯超集的一种方式。 Objective-C设计者决定代表对象的方式是使用C指针:对象类型的所有变量(包括NSString)都必须声明为指针。实际上,定义一个没有星号的对象类型变量是错误的:

NSString country; // <<== ERROR: this will not compile 
0

对象始终使用指针寻址。你不能解除引用他们。因此,这是没有必要的,并且将取消引用对象指针是错误的。

+0

增加:技术上有可能取消对象指针,但是没用。 –