2012-05-28 49 views
1

如果我宣布一个NSMutableString为什么一个对象变量必须是一个指针?

NSMutableString *str_value; 

为什么我要声明这是一个指针(使用*)?如果我不这样做,我会收到一个编译错误。

有人可以解释清楚吗?

+0

than q @viadimir –

+2

对不起,什么是“可可”?我打算将它改正为“Cocoa”,但这没有意义,因为'NSMutableString str_value;'在Cocoa中是一个错误(你只能声明指向Objective-C对象的指针)。 – JeremyP

+2

使用IRC强烈建议不要在SO上使用英文。 – dasblinkenlight

回答

3

回想一下,目标C是一个超集C.的当声明的变量,而不用C *,这是一个指示该变量的存储器为在自动存储分配,如果它是一个局部变量,作为其外部结构的一部分(如果它是结构的成员),或者在静态存储器中(如果它是静态的或全局的)。在函数的参数列表中使用没有*的typename或结构变量指示按值传递。目标C语言的设计者可能采用了类似于Java的路由,使得每个类实例都是一个没有指针语法的指针,但是Objective C中的程序读者需要知道名称是否代表基于structid类型的typedef,以回答关于该类型的对象的最基本问题,例如,如果它通过指针或值隐式传递,如果它作为拥有结构的一部分分配,或者作为堆对象由结构内的指针指向,等等。

为了避免这种混淆,Objective C的设计者决定保留id对象的显式指针语法。

1

指针表示您指向/引用该类。是的,它会导致编译错误,指针的原因主要是内存。一种数据类型(int或BOOL或float等)只有几个字节,因此不需要有指针。但NSMutableString和其他Objective-C类有很多属性和方法,并有很多代码。因此,因为在你的应用程序中会有很多对象,这会占用很多内存,从而减慢你的应用程序/降低性能。当然你应该在你制作一个指针后释放这个对象。

相关问题