指针还是不指针?或者这是一个指针?

时间:2012-11-26 02:05:29

标签: objective-c pointers memory-management garbage-collection

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

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

string s = "Hello Mike!";

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

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

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

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

2 个答案:

答案 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")是次要的。)