NSString的内存存储

1、NSString内存的存储
平时在代码编程过程中,经常使用NSString对象,而且官网文档中要求NSString属性修饰词要使用copy,那么使用copy的原理是什么呢,不同数据的NSString内存储存又是什么样子的呢?
属性修饰词使用copy已在前面文章《copy与mutableCopy的区别》与《copy、strong、assign、weak修饰》讲过,此处就不在陈述,这里就重点讲一下NSString对象在内存中是怎么存储的。
这里先列举几种情况的代码,如图:
NSString *str = [NSString string];
NSString *str1 = [NSString string];

NSString *str2 = @"1";
NSString *str3 = @"3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333";

NSString *str4 = [NSString stringWithString:str1];
NSString *str5 = [NSString stringWithString:str2];
NSString *str6 = [NSString stringWithString:str3];

NSString *str7 = [NSString stringWithFormat:str1];
NSString *str8 = [NSString stringWithFormat:str2];
NSString *str9 = [NSString stringWithFormat:str3];

// 分别打印每个NSString对象的地址,对象指针地址,以及class:
NSLog(@"str = %p str地址 =%p, class = %@", str, &str, [str class]);
NSLog(@"str1 = %p str1地址 =%p, class = %@", str1, &str1, [str1 class]);
NSLog(@"str2 = %p str2地址 =%p, class = %@", str2, &str2, [str2 class]);
NSLog(@"str3 = %p str3地址 =%p, class = %@", str3, &str3, [str3 class]);
NSLog(@"str4 = %p str4地址 =%p, class = %@", str4, &str4, [str4 class]);
NSLog(@"str5 = %p str5地址 =%p, class = %@", str5, &str5, [str5 class]);
NSLog(@"str6 = %p str6地址 =%p, class = %@", str6, &str6, [str6 class]);
NSLog(@"str7 = %p str7地址 =%p, class = %@", str7, &str7, [str7 class]);
NSLog(@"str8 = %p str8地址 =%p, class = %@", str8, &str8, [str8 class]);
NSLog(@"str9 = %p str9地址 =%p, class = %@", str9, &str9, [str9 class]);
log输出
str = 0x7fff8c0061e8 str地址 =0x7ffeefbff458, class = __NSCFConstantString
str1 = 0x7fff8c0061e8 str1地址 =0x7ffeefbff450, class = __NSCFConstantString
str2 = 0x100008078 str2地址 =0x7ffeefbff448, class = __NSCFConstantString
str3 = 0x100008238 str3地址 =0x7ffeefbff440, class = __NSCFConstantString
str4 = 0x7fff8c0061e8 str4地址 =0x7ffeefbff438, class = __NSCFConstantString
str5 = 0x100008078 str5地址 =0x7ffeefbff430, class = __NSCFConstantString
str6 = 0x100008238 str6地址 =0x7ffeefbff428, class = __NSCFConstantString
str7 = 0x7fff8ba7ace0 str7地址 =0x7ffeefbff420, class = __NSCFConstantString
str8 = 0x371e8c598045a6e5 str8地址 =0x7ffeefbff418, class = NSTaggedPointerString
str9 = 0x103006760 str9地址 =0x7ffeefbff410, class = __NSCFString
通过log可以看出:
1、NSString对象通过【NSString string】函数生成的对象是同一块内存,该对象类型为__NSCFConstantString,内存存储在常量区;
2、不同长度的字符串生成

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容