NSSting的對象在使用@"xx"直接初始化賦值時,它會在內存"stack segment"中分配一個空間,用於保存該變量。
相同賦值的對象,會采用相同的內存空間,表現為內存地址相同。
可以理解為NSString的isa的值是一樣的。
NSString *str2=@"e中國2";
NSString *str3=@"e中國2";
// %p for pointers to show the memory address
NSLog(@"str2'addr is %p str3'addr is %p",str2,str3);
if (str2 == str3)
{
NSLog(@"str2'pointer = str3's");
}
if ([str2 isEqualToString:str3])
{
NSLog(@"str2'content = str3's");
}
使用stringWithFormat:工廠方法初始化NSString對象時,每次都獨立分配內存空間。
我懷疑這個空間是在heap segment中,而不是stack segment中。
即使相同內容的NSString對象,通過%d獲取的對象的內存地址的值不一致。
NSString *str2=[NSString stringWithFormat:@"e中國%i",2];
NSString *str3=[NSString stringWithFormat:@"e中國%i",2];
// %p for pointers to show the memory address
NSLog(@"str2'addr is %p str3'addr is %p",str2,str3);
if (str2 == str3)
{
NSLog(@"str2'pointer = str3's");
}
if ([str2 isEqualToString:str3])
{
NSLog(@"str2'content = str3's");
}
NSString的比較方法,比較內容應該是isEqualToString:,比較指針的是==比較符號。通常情況下,你需要比較的都會是內容本身而不是其指針值。