黑马程序员技术交流社区
标题: NSString内存管理 [打印本页]
作者: SUPERREN_Hao 时间: 2016-1-14 15:46
标题: NSString内存管理
//
// 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;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |