理解目标中的参考c

Pie*_*ier 0 objective-c actionscript-3

我来自AS3背景.在AS3中,当您将对象分配给var时,不将对象复制到var,var将成为对象的引用.

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
Run Code Online (Sandbox Code Playgroud)

在Objective C,AFAIK中,当你将一些对象分配给另一个对象的某个属性时,"对象被复制.我的困惑来自于使用temp对象后你可以释放它.

NSMutableString* myString = [[NSMutableString alloc] initWithString:@"Hello"];
[myLabel setText:myString]; 
[myString release];
Run Code Online (Sandbox Code Playgroud)

...如果你能释放它意味着你不再需要它了.所以它被复制了?或者myLabel中的"text"属性是对myString的引用?

你可以猜测我刚开始在Objective C的世界里.

TIA

jtb*_*des 6

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

我建议您阅读内存管理编程指南以获取更多信息.