好吧,自从我使用指针以来已经很长时间了。现在我已经写了十多年的.NET代码,所以我没有必要处理它们。实际上,在.NET中它非常好,因为如果它不是值类型,那么它显然是一个引用类型,或者定义为一个指针。
所以,在.NET中,当我声明string
时,它肯定是一个底层指针,因为它是一个引用类型:
string s = "Hello Mike!";
然而,似乎在Objective-C中我可以用两种不同的方式声明字符串:
NSString* s = "Hello Mike!";
NSString s = "Hello Mike!";
现在,如果我正确地理解了这一点,那么第一个声明非常类似于.NET中字符串的底层声明,一个指针。但到底是什么呢?
现在请记住,我可能会离开这里,因为我刚刚开始深入了解Objective-C,所以请原谅我的无知!
答案 0 :(得分:2)
您的NSString
声明都不应该实际编译。第一个应该告诉您这是一个不兼容的赋值,因为您将C字符串指针指定为对象地址。第二个应该告诉你,你实际上不能声明一个对象,只能指向一个对象的指针。正确的语法是:
NSString* s = @"Hello Mike!";
在这种情况下,s
是一个指针变量,它包含一个字符串对象的地址,具有“Hello Mike!”值。
答案 1 :(得分:1)
从REALbasic到Objective-C对我来说是相似的:它们都使用指针作为对象实例的引用,但在REALbasic中,事实是隐式的,而Objective-C是C,因此必须使它显式化。然而,这个事实实际上只是一个符号意外。分配和比较等方面的含义相似。
通过阅读本书中有关此主题的相关条目,您可能会得到帮助:
http://www.apeth.com/iOSBook/ch03.html#_an_instance_reference_is_a_pointer
(你似乎还不明白如何形成一个NSString文字(它以一个at符号开头,例如@"hello"
)是次要的。)