0

好吧,自从我使用指针以来已经有很长时间了。现在我已经编写 .NET 代码十多年了,所以我不必处理它们。事实上,在 .NET 中它非常好,因为如果它不是值类型,那么它显然是引用类型,或者定义为指针。

因此,在 .NET 中,当我声明 a 时string,它肯定是一个底层指针,因为它是一个引用类型:

string s = "Hello Mike!";

但是,在 Objective-C 中,我似乎可以用两种不同的方式声明一个字符串:

NSString* s = "Hello Mike!";
NSString s = "Hello Mike!";

现在,如果我正确理解这一点,第一个声明非常类似于 .NET 中字符串的底层声明,即指针。但第二个究竟是什么?

现在请记住,我可能离这里很远,因为我刚刚开始深入研究 Objective-C,所以请原谅我的无知!

4

2 回答 2

2

您的任何NSString声明都不应该实际编译。第一个应该告诉您这是一个不兼容的分配,因为您分配了一个 C 字符串指针,就好像它是一个对象地址一样。第二个应该告诉您,您实际上不能声明一个对象,只能声明一个指向对象的指针。正确的语法是:

NSString* s = @"Hello Mike!";

在这种情况下,s是一个指针变量,它包含一个字符串对象的地址,具有“Hello Mike!” 价值。

于 2012-11-26T02:12:21.410 回答
1

从 REALbasic 到 Objective-C 对我来说是相似的:它们都使用指针作为对象实例的引用,但在 REALbasic 中,这一事实是隐含的,而 Objective-C 是 C,因此必须使其显式。然而,这一事实实际上只是符号的意外。对于赋值和比较之类的事情,其含义是相似的。

阅读我关于此主题的书中的相关条目可能会对您有所帮助:

http://www.aeth.com/iOSBook/ch03.html#_an_instance_reference_is_a_pointer

(事实上​​,您似乎还不了解如何形成 NSString 文字(它以 at 符号开头,例如@"hello",是次要的。)

于 2012-11-26T02:20:40.423 回答