Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 内存存储是堆还是堆栈?_Objective C_Stack Trace_Heap Memory - Fatal编程技术网

Objective c 内存存储是堆还是堆栈?

Objective c 内存存储是堆还是堆栈?,objective-c,stack-trace,heap-memory,Objective C,Stack Trace,Heap Memory,NSString*myString=@“MUKESH” 常量NSString*myString1=@“MUKESH”静态NSString*myString2=@“MUKESH” NSString*myString3=[NSString stringWithFormat:@“HELLO”] NSString*myString4=[NSString alloc]initWithString:@“HEllo”] 我的问题与内存堆和堆栈存储过程有关? 1-哪个字符串将像堆栈一样存储,或者哪个字符串将像


NSString*myString=@“MUKESH”
常量NSString*myString1=@“MUKESH”
静态NSString*myString2=@“MUKESH”
NSString*myString3=[NSString stringWithFormat:@“HELLO”]

NSString*myString4=[NSString alloc]initWithString:@“HEllo”]

我的问题与内存堆和堆栈存储过程有关?
1-哪个字符串将像堆栈一样存储,或者哪个字符串将像堆一样存储


谢谢

您没有在Obj-C中声明堆栈上对象的选项。。。但这些也不是完全的堆分配

在守则中:

NSString *myString=@"MUKESH";
变量myString是指向NSString的指针。。。它是在堆栈上分配的,它指向的变量实际上不在堆上,而是在内存中一个特殊的常量部分

在守则中:

NSString *myString4 =[NSString alloc] initWithString:@"HEllo"];
您可能希望myString4指向的值是堆分配的,但由于NSString的initWithString方法中有一个快捷方式,因此如果初始化它的字符串是常量字符串,它将只返回常量字符串。。。您可以通过以下方式进行验证:

NSString *myString4 =[[NSString alloc] initWithString:@"HEllo"];
if(myString4 == @"HEllo")
{
    NSLog(@"well that's weird");
}
但是如果你做了类似的事情

 NSString *myString5 =[[NSString alloc] initWithFormat:@"HEllo: %s", "Doc"];

那么myString5指向的值实际上是堆分配的。。。但实际上,在Objective-C中,您不应该关心这个问题,您只是没有在Objective-C的堆栈上声明对象的选项。。。但这些也不是完全的堆分配

在守则中:

NSString *myString=@"MUKESH";
变量myString是指向NSString的指针。。。它是在堆栈上分配的,它指向的变量实际上不在堆上,而是在内存中一个特殊的常量部分

在守则中:

NSString *myString4 =[NSString alloc] initWithString:@"HEllo"];
您可能希望myString4指向的值是堆分配的,但由于NSString的initWithString方法中有一个快捷方式,因此如果初始化它的字符串是常量字符串,它将只返回常量字符串。。。您可以通过以下方式进行验证:

NSString *myString4 =[[NSString alloc] initWithString:@"HEllo"];
if(myString4 == @"HEllo")
{
    NSLog(@"well that's weird");
}
但是如果你做了类似的事情

 NSString *myString5 =[[NSString alloc] initWithFormat:@"HEllo: %s", "Doc"];

那么myString5指向的值实际上是堆分配的。。。但实际上,在Objective-C中,您不应该关心这个问题,您只是没有在Objective-C的堆栈上声明对象的选项。。。但这些也不是完全的堆分配

在守则中:

NSString *myString=@"MUKESH";
变量myString是指向NSString的指针。。。它是在堆栈上分配的,它指向的变量实际上不在堆上,而是在内存中一个特殊的常量部分

在守则中:

NSString *myString4 =[NSString alloc] initWithString:@"HEllo"];
您可能希望myString4指向的值是堆分配的,但由于NSString的initWithString方法中有一个快捷方式,因此如果初始化它的字符串是常量字符串,它将只返回常量字符串。。。您可以通过以下方式进行验证:

NSString *myString4 =[[NSString alloc] initWithString:@"HEllo"];
if(myString4 == @"HEllo")
{
    NSLog(@"well that's weird");
}
但是如果你做了类似的事情

 NSString *myString5 =[[NSString alloc] initWithFormat:@"HEllo: %s", "Doc"];

那么myString5指向的值实际上是堆分配的。。。但实际上,在Objective-C中,您不应该关心这个问题,您只是没有在Objective-C的堆栈上声明对象的选项。。。但这些也不是完全的堆分配

在守则中:

NSString *myString=@"MUKESH";
变量myString是指向NSString的指针。。。它是在堆栈上分配的,它指向的变量实际上不在堆上,而是在内存中一个特殊的常量部分

在守则中:

NSString *myString4 =[NSString alloc] initWithString:@"HEllo"];
您可能希望myString4指向的值是堆分配的,但由于NSString的initWithString方法中有一个快捷方式,因此如果初始化它的字符串是常量字符串,它将只返回常量字符串。。。您可以通过以下方式进行验证:

NSString *myString4 =[[NSString alloc] initWithString:@"HEllo"];
if(myString4 == @"HEllo")
{
    NSLog(@"well that's weird");
}
但是如果你做了类似的事情

 NSString *myString5 =[[NSString alloc] initWithFormat:@"HEllo: %s", "Doc"];

那么myString5指向的值实际上是堆分配的。。。但实际上,您不应该关心Objective-C中的实现细节,因为NSString有一些实现细节,可以从我们这里提取字符串值的实际位置。您特别想要完成什么?我认为它不可能在堆栈上,否则当您退出声明字符串的函数时,字符串将被释放。它在堆上,或者更可能在全局内存(数据部分)中。但您不能确定,这取决于实现。Objective-C对象从未在堆栈上分配。指向Objective-C对象的指针可以在堆栈中分配,也可以在其他Objective-C对象中分配。堆栈上唯一可以分配的对象类型是块。这些对象都没有在堆栈上分配。验证的简单方法是,您可以从一个函数返回所有字符串,它们不会被破坏。
NSString
提供了从我们这里提取字符串值的实际位置的实现细节。您特别想要完成什么?我认为它不可能在堆栈上,否则当您退出声明字符串的函数时,字符串将被释放。它在堆上,或者更可能在全局内存(数据部分)中。但您不能确定,这取决于实现。Objective-C对象从未在堆栈上分配。指向Objective-C对象的指针可以在堆栈中分配,也可以在其他Objective-C对象中分配。堆栈上唯一可以分配的对象类型是块。这些对象都没有在堆栈上分配。验证的简单方法是,您可以从一个函数返回所有字符串,它们不会被破坏。
NSString
提供了从我们这里提取字符串值的实际位置的实现细节。您特别想要完成什么?我认为它不可能在堆栈上,否则当您退出声明字符串的函数时,字符串将被释放。它在堆上,或者更可能在全局内存(数据部分)中。但您不能确定,这取决于实现。Objective-C对象从未在堆栈上分配。指向Objective-C对象的指针可以在堆栈中分配,也可以在