繁体   English   中英

将对象传递给未分配的指针

[英]Passing Object to Unallocated Pointer

假设我已经声明了这样的NSString

NSString *myString = [[NSString alloc] initWithString:@"Never Heard"];
NSString *tempString;

tempString = myString;

[myString release];

我的问题是它为什么有效? 如您所见,我没有为tempString分配。 因此,我认为没有必要发布它。 但是如果我尝试分配并初始化tempString,它将带来错误。

NSString *myString = [[NSString alloc] initWithString:@"Never Heard"];
NSString *tempString = [[NSString alloc] init];

tempString = myString;

[myString release];

我使用NSString作为示例,但我实现了不同的类。 我试图强调内存分配在这里是如何工作的。 注意澄清和解释?

指针只是一个内存地址。 您只创建一个对象,然后将tempString指向该对象。 tempString == myString

[myString release]解除分配字符串,使两个指针都指向释放的内存。

不要将变量与对象混淆。 变量只是用于访问对象的句柄。 创建新变量并不意味着您正在创建新对象。

这绝对不是关于内存分配。 这就是指针如何工作。 当你这样做:

tempString = myString;

tempString指向与myString相同的对象。 因此,在tempString上调用任何方法与在myString上调用它们相同。

tempString = myString;

在上面的语句中, myString, tempString都指向存储"Never Hard"的位置。 所以,没有错误。

而且我不明白你的意思 - "But if I try to alloc and init the tempString, it will bring an error."

编辑1

第二个代码片段是内存泄漏的一个例子。 tempString分配了内存位置。 让我们用例子 -

myString -> MemoryLocation_1 that has "Never Hard"
tempString -> MemoryLocation_2 and the location it is pointing to isn't intialized with any value.

Now, with this statement -
tempString = myString;

Both myString  and tempString -> MemoryLocation_1 that has "Never Hard"

从免费商店获得的MemoryLocation_2怎么样? 它不会返回到免费商店并且躺在那里,程序终止之前没有程序可以访问。 从而给内存泄漏 希望它有助于理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM