NSString *myString=@"MUKESH";
const NSString *myString1=@"MUKESH";
static NSString *myString2=@"MUKESH";
NSString *myString3=[NSString stringWithFormat:@"HELLO"];
NSString *myString4 =[NSString alloc] initWithString:@"HEllo"];
我的问题与内存堆和堆栈存储过程有关?
1-哪个字符串将像堆栈一样存储或哪个存储为堆?
谢谢
答案 0 :(得分:3)
你只是没有选择在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中的那个