Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / NSString对象的初始化和比较

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:,比较指针的是==比较符号。通常情况下,你需要比较的都会是内容本身而不是其指针值。