Objective c 解释对象变量声明和赋值

Objective c 解释对象变量声明和赋值,objective-c,object,pointers,syntax,Objective C,Object,Pointers,Syntax,在此片段中: NSString *testString; testString = [[NSString alloc] init]; 为什么,在第二行,我们不必写*testString=…来访问它实际指向的位置 在第一行之后,什么是*testString,什么是testString?创建NSString类型指针的第一行。C++和ObjuleC中的指针在声明时用星号(*)字符表示。您所说的这个指针的第二行称为“testString”,它引用了您在内存中分配的NSString对象的内存位置。您

在此片段中:

NSString *testString; 
testString = [[NSString alloc] init]; 
为什么,在第二行,我们不必写
*testString=…
来访问它实际指向的位置


在第一行之后,什么是
*testString
,什么是
testString

创建NSString类型指针的第一行。C++和ObjuleC中的指针在声明时用星号(*)字符表示。您所说的这个指针的第二行称为“testString”,它引用了您在内存中分配的NSString对象的内存位置。

您所创建的NSString类型指针的第一行。C++和ObjuleC中的指针在声明时用星号(*)字符表示。您所说的第二行指针“testString”引用了您在内存中分配的NSString对象的内存位置。

所有对象都由指针引用。第一行

NSString * testString;
声明实例变量。如果变量类型是对象(类型id除外),则需要*

从那时起,对testString的引用就是指针

如果创建2个字符串。创建2个物理对象(在内存中)

NSString*testString=[[NSString alloc]init];
NSString*testString2=[[NSString alloc]init];
//将testString设置为testString2将永远丢失指向testString的指针

testString=testString2// 所有对象都由指针引用。第一行

NSString * testString;
声明实例变量。如果变量类型是对象(类型id除外),则需要*

从那时起,对testString的引用就是指针

如果创建2个字符串。创建2个物理对象(在内存中)

NSString*testString=[[NSString alloc]init];
NSString*testString2=[[NSString alloc]init];
//将testString设置为testString2将永远丢失指向testString的指针

testString=testString2// 这仅仅是因为我们影响了指针

[[NSString alloc]init]
返回指向NSString的指针


在Cocoa中,每个对象都是动态分配的(如C中的
malloc
),每个
NSObject
都是通过其指针/地址进行操作的(在这种情况下,许多ObjC程序员甚至不知道他们在操作指针而不是对象)

,这仅仅是因为我们影响指针

[[NSString alloc]init]
返回指向NSString的指针

在Cocoa中,每个对象都是动态分配的(如C中的
malloc
),每个
NSObject
都通过其指针/地址进行操作(在这种情况下,许多ObjC程序员甚至不知道他们在操作指针而不是对象)

为什么,在第二行,我们不必写
*testString=…
来访问它实际指向的位置

init
方法返回指向对象的通用指针——其返回类型为
id
testString
是指向
NSString
的指针,它是一个对象,因此您将指针分配给另一个指针。取消引用分配给指针将是一种类型不匹配

变量名是放置某物的位置(内存地址的标签)。变量的类型是可以放在那里的类型。在指针的情况下,你放在它里面的东西也是一个内存地址。为了获得该地址,您需要取消对指针的引用。你可以放在那个地址上的东西和你放在指针上的东西是不同的

在第一行之后,什么是
*testString
,什么是
testString

在第一行之后,
*testString
,或者
testString
指向的东西是垃圾(实际上未定义)
testString
是指向内存中地址的指针(4或8字节,具体取决于您的系统),它也是未定义的

在第二行之后,
*testString
是一个
NSString
对象
testString
仍然是指向地址的指针,其中有一个有效的
NSString
对象

为什么,在第二行,我们不必写
*testString=…
来访问它实际指向的位置

init
方法返回指向对象的通用指针——其返回类型为
id
testString
是指向
NSString
的指针,它是一个对象,因此您将指针分配给另一个指针。取消引用分配给指针将是一种类型不匹配

变量名是放置某物的位置(内存地址的标签)。变量的类型是可以放在那里的类型。在指针的情况下,你放在它里面的东西也是一个内存地址。为了获得该地址,您需要取消对指针的引用。你可以放在那个地址上的东西和你放在指针上的东西是不同的

在第一行之后,什么是
*testString
,什么是
testString

在第一行之后,
*testString
,或者
testString
指向的东西是垃圾(实际上未定义)
testString
是指向内存中地址的指针(4或8字节,具体取决于您的系统),它也是未定义的

在第二行之后,
*testString
是一个
NSString
对象
testString
仍然是指向地址的指针,其中有一个有效的
NSString
对象