2014-01-05 35 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

增加:技術上有可能取消對象指針,但是沒用。 –