歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> NSString對象的初始化和比較

NSString對象的初始化和比較

日期:2017/3/1 10:08:28   编辑:Linux編程

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:,比較指針的是==比較符號。通常情況下,你需要比較的都會是內容本身而不是其指針值。

Copyright © Linux教程網 All Rights Reserved