0
NSString *testString;  
testString = [[NSString alloc] init]; 

不管我读了多少关于它的答案,我都不明白这一点——人们一直在交换术语,说 testString 是一个变量,然后说那是一个指针,我很困惑。

到目前为止,这是我的理解。我们在第一行声明了指针 testString……那么 [[NSString alloc] init] 返回一个实际的 NSString 对象还是 NSString 对象的地址?

4

2 回答 2

4

在您的示例testString中是“指向NSString”类型的变量。

所有的 Objective C 对象都是通过指针类型的字段和变量来处理的。当他们说“init返回一个对象”时,该语句的扩展版本应该是“init返回一个指向对象的指针”。但是,由于所有对象都是通过指针处理的,因此可以安全地删除“指向”说明。

于 2013-09-11T19:58:26.953 回答
0

它返回一个 NSString 的地址。

像许多面向对象的语言一样,Obj-C 使用对对象的引用(又名指针)。

NSString *testString;

只是创建一个局部变量 testString ,该变量目前未定义,但很快将包含对 NSString 对象的引用。

testString = [[NSString alloc] init];

导致运行时系统在内存中的某处分配一个 NSString 对象,并返回一个指向内存中该位置的指针。'=' 运算符将该内存地址分配给变量 testString。

您对互换术语的观察是正确的。在实践中,我们倾向于将 testString 视为字符串本身,但它实际上是一个指向任何地方的指针。

记录在案 - 这适用于所有对象,而不仅仅是字符串。当我们分配一个对象时,会返回一个对新对象的引用。

于 2013-09-11T20:21:16.313 回答