zoukankan      html  css  js  c++  java
  • NSString 初始化方法的内存比较

     NSString *str1 = @"hello";

        NSString *str2 = @"hello";

        NSString *str3 = [NSString stringWithFormat:@"hello"];

        NSString *str4 = [NSString stringWithString:@"hello"];

        NSString *str5 = [[NSString alloc]initWithString:@"hello"];

        NSLog(@"%p //%p //%p // %p //%p",str1,str2,str3,str4,str4,str5);

       0x92a88 //0x92a88 //0x796b96b0 // 0x92a88 //0x92a88

     

    SSting的对象在使用@"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);

    使用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);

    NSString的比较方法,比较内容应该是isEqualToString:,比较指针的是==比较符号。通常情况下,你需要比较的都会是内容本身而不是其指针值。

  • 相关阅读:
    window+Apache+php+mysql注意事项
    【转】QRCode二维码的应用心得
    如何创建和配置服务器证书进行SSL Relay
    Citrix 实践中的问题及解决
    web.config中httpRunTime的属性
    [原]IE9 DOM的自定义属性问题
    添加图片到数据库
    Windows server 2008安装企业CA证书服务
    EXTJS Date 的转换格式化字符
    Extjs 4.1 学习笔记(一)(proxy,loader,treestore)
  • 原文地址:https://www.cnblogs.com/mcj-coding/p/5049755.html
Copyright © 2011-2022 走看看