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对象的指针可以在堆栈中分配,也可以在