Objective c 理解目标c中的指称

Objective c 理解目标c中的指称,objective-c,actionscript-3,Objective C,Actionscript 3,我有AS3的背景。在AS3中,当您将一个对象指定给一个变量时,您不会将该对象复制到该变量,该变量将成为对该对象的引用 var myObject = new MyClass(); myObject.name = "Bananas"; var myRef = {}; myRef.ref = myObject; trace(myRef.ref.name); // Bananas myObject.name = "Mango"; trace(myRef.ref.name); // Mango my

我有AS3的背景。在AS3中,当您将一个对象指定给一个变量时,您不会将该对象复制到该变量,该变量将成为对该对象的引用

var myObject = new MyClass();
myObject.name = "Bananas";

var myRef = {};
myRef.ref = myObject;
trace(myRef.ref.name); // Bananas

myObject.name = "Mango";
trace(myRef.ref.name); // Mango

myObject = null;
trace(myRef.ref); // null
在Objective C中,AFAIK,当您将某个对象分配给另一个对象的某个属性时,“对象被复制。我的困惑来自这样一个事实,即在使用临时对象之后,您可以释放它

NSMutableString* myString = [[NSMutableString alloc] initWithString:@"Hello"];
[myLabel setText:myString]; 
[myString release];
…如果你可以释放它,就意味着你不再需要它了。所以它被复制了?或者myLabel中的“text”属性是对myString的引用

你可以猜到,我刚刚开始在目标C的世界里


TIA发布myString是正确的做法


myLabel将保留该字符串,现在负责释放它。

释放myString是正确的做法


myLabel将保留字符串,现在负责释放它。

否。Objective-C也使用引用(这就是为什么在每个类名之后都会看到
*
,它实际上是一个指针)。但是,Obj-C还有一个内存管理系统。当您使用
myString=[[NSMutableString alloc]…]
您正在创建一个您“拥有”的新字符串。但是当您调用
[myLabel setText:myString]
时,标签将保留该字符串并有效地获得所有权。因此,当您调用
[myString release]
,您正在放弃所有权,但由于标签仍然拥有所有权,因此字符串实际上不会从内存中释放


我鼓励您阅读以了解更多信息。

否。Objective-C也使用引用(这就是为什么您在每个类名后面看到
*
,它实际上是一个指针)。然而,Obj-C也有一个内存管理系统。当您使用
myString=[[NSMutableString alloc]…]时,您正在创建一个您自己的新字符串“。但是当您调用
[myLabel setText:myString]
时,标签将保留字符串并有效地获得所有权。因此,当您调用
[myString release]
时,您将放弃所有权,但由于标签仍然拥有所有权,因此字符串实际上不会从内存中释放


我建议您阅读以了解更多信息。

它是对对象的引用,当您将其指定给标签时,保留计数会撞击字符串,因此您可以“释放”本地引用,以便在处理标签时可以清理字符串


有关详细信息,请参阅。

它是对对象的引用,当您将其指定给标签时,保留计数会在字符串上碰撞,因此您可以“释放”本地引用,以便在处理标签时可以清理字符串

有关更多信息,请参阅