为什么对象变量必须是指针?

时间:2012-05-28 10:25:51

标签: objective-c pointers compiler-errors

如果我宣布NSMutableString

NSMutableString *str_value;

为什么我必须将其声明为指针(使用*)?如果我不这样做,我会收到编译错误。

有人能解释清楚吗?

2 个答案:

答案 0 :(得分:3)

回想一下,Objective C是C的超集。当你在C中声明一个没有*的变量时,它表明该变量的内存是在自动分配的存储,如果它是局部变量,如果它是结构的成员,则作为其外部结构的一部分;如果是静态或全局,则存储在静态存储器中。在函数的参数列表中使用不带*的typename或结构标记表示按值传递。

Objective C语言的设计者可以采用类似Java的路径,使得每个类实例都是没有指针语法的指针,但是Objective C中的程序读者需要知道名称是否代表typedef基于structid类型来回答关于该类型对象的最基本问题,例如,如果它被指针或值隐式传递,如果它被分配为该类型的一部分拥有结构或作为结构内指针指向的堆对象,依此类推。

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

答案 1 :(得分:1)

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