gpt4 book ai didi

iOS/对象 C : Variable allocations and release

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:22:27 24 4
gpt4 key购买 nike

我想打印(记录)以下变量存储在堆栈和堆中的内容。我想知道下面这些变量存储在这个程序中的什么地方。我的感觉是,除了前两个变量,其他的都存储在堆中。

-(void) MyFunction
{
flat value = 9.5; // Stored in Stack?
int count; // Stored in Stack?
NSString *myString = @"Incoming message"; // Stored in Heap
NSArray *myArr = [[NSArray alloc] init]; // Stored in Heap

.......
.......
}

在这种情况下,我该如何使用“release”释放它们?

  1. 如何打印/记录这些变量在堆栈/堆中的存储位置?
  2. 我在上面程序中提到的存储位置(堆/栈)的假设是正确的还是错误的?
  3. 如果分配的对象存储在堆内存中,它们的引用也将仅在堆中(或)引用将在堆栈中?

最佳答案

I would like to print (log) what are the below variables are stored in stack and heap. I want to know where are these below variables are stored in this program.

你不太可能真的想那样做,但你可以这样:

NSLog(@"value:%p", &value);
NSLog(@"count:%p", &count);
NSLog(@"myString:%p", myString);
NSLog(@"myArr:%p", myArr);

关于它们的存储位置:

float value = 9.5; // Stored in Stack?

可能,如果你真的修改它。它也可能存储在寄存器中。或者,如果结果是恒定的,它可能会被完全优化掉。上面的日志语句会强制将其存储在堆栈中(因此它可以有一个地址),因此询问变量存储在哪里实际上可以改变它存储的位置。

但是,是的,作为未优化代码的粗略近似,自动变量存储在堆栈中。

int count;   // Stored in Stack?

再次,可能。当然,如果您从不访问它,它可能会被完全优化掉。

NSString *myString = @"Incoming message";  // Stored in Heap

this 指向的常量字符串存储在文本段中(在代码本身中)。 myString 指针本身是一个自动变量,但是,它存储在上面的堆栈中。

NSArray *myArr = [[NSArray alloc] init];   // Stored in Heap

这可以优化为存储在框架中的常量空数组。或者它可能在堆上。

In this case, how do i release those, using 'release'?

没有。您使用 ARC 管理这些,ARC 将为您管理保留和发布。您不应在大多数代码中手动调用发布。

If an allocated objects stored in heap memory, their references will also be in heap only (or) reference will be in stack?

指针变量本身存储在栈上。

关于iOS/对象 C : Variable allocations and release,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20304618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com