// // main.m // NSString的内存管理 // // Created by Markrry-hao on 16/1/4. // Copyright © 2016年 mac. All rights reserved. //
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) { @autoreleasepool {
int m =10;//m是一个变量 int类型的,局部变量,存方法在内存的 栈区 NSLog(@"m= %p",&m); //栈区内存是从大往下分配的,堆区,从小往上分配
char *s = "abc"; NSLog(@"s = %p",s);//在常量区
//第一种情况,@"字符串";,是oc中产量字符串,保存到常量区 NSString *str = @"abc"; NSLog(@"str = %@,addr = %p",str,str);
//警告 [NSString stringWithString:@"abc"];替换成@"abc"; //str1 ->str; //2.stringWithString 生成的字符串也是在常量区存储的 NSString *str1 = [NSString stringWithString:@"abc"]; NSLog(@"str1 = %@,addr = %p",str1,str1);
//3,str存放在内存的堆区 // 在Xcodo 6.4下,字符串内容 abc 引用计数为1 // 在Xcodo 7下,字符串内容 abc 引用计数为无符号long类型的最大值 // 字符串内容 abc加中文,引用计数为1 NSString *str2 = [NSString stringWithFormat:@"abc"]; NSLog(@"str2 = %@,addr = %p",str2,str2);
//4,并没有产生新空间,存放在内存常量区 NSString *str3 = [[NSString alloc]initWithString:@"abc"]; NSLog(@"str3 = %@,addr = %p",str3,str3);
//5,str4initWithFormat也是在内存的堆区存放 NSString *str4 = [[NSString alloc]initWithFormat:@"sss"]; NSLog(@"str4 = %@,addr = %p",str4,str4);
//6,str5 比较特殊,在栈区生成,并不是在堆区 NSString *str5 =[[NSString alloc]init]; NSLog(@"str5 = %@,addr = %p",str5,str5);
} return 0; }
|