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需要程序猿手动释放。 |
|