1

如果我声明一个NSMutableString

NSMutableString *str_value;

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

有人能解释清楚吗?

4

2 回答 2

3

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

Objective C 语言的设计者本可以采取类似 Java 的路线,使每个类实例都是一个没有指针语法的指针,但是 Objective C 程序的读者需要知道一个名称是否代表一个基于struct或一种id类型,甚至可以回答有关该类型对象的最基本问题,例如它是通过指针还是通过值隐式传递,是作为拥有结构的一部分分配还是作为内部指针指向的堆对象分配结构等等。

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

于 2012-05-28T11:01:55.030 回答
1

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

于 2012-05-28T10:49:50.743 回答