A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhuhoulin 中级黑马   /  2015-7-19 22:08  /  616 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

NSString等Foundation框架提供的类的内存管理
    (1)字符串的常量池(在数据区)
    (2)
        NSString *str1 = @“abc”;
        NSString *str2 = [NSString stringWithString:@"abc"];
        NSString *str3 = [[NSString alloc] initWithString:@"abc"];
        以上3个的空间在栈区,并且str1,str2,str3指向的是同一个地址,也就是说abc在数据区只存储了1份。如果你需要的字符串在常量池中已经存在了,
        不会分配新的内存空间。符合此规则的有以下几种:

        NSString *str4 = [NSString stringWithformat:@"abc"];
        NSString *str5 = [[NSString alloc] initWithFormat:@"abc"];
        以上两种情况,字符串是存储在堆区的,并且两个的内存地址并不相同,也就是说同一段字符串在堆区中存储了两份。
     
        注:对于alloc关键字而言,他本身的意思是分配内存空间,如果没有的话,系统会自动分配空间,并且系统也会自动进行release,不需要程序猿
            自己释放。而alloc需要程序猿手动释放。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马