iOS 内存

2018-11-29  本文已影响7人  小凡凡520
五大内存区域

栈区,堆区,全局区,常量区,代码区,五大内存区域之外还有 自由存储区也称之五大区域之外区、

属性标识符
MRC与ARC区别
NSString内存
//该代码是在MRC环境下测试用  

NSString *str1 = @"123456789";//用@""方法创建一个  固定长度为9的字符串
NSString *str2 = @"1234567890";//用@""方法创建一个  固定长度为10的字符串


NSString *str3 = [NSString stringWithFormat:@"234567890"];//用stringWithFormat方法创建一个  固定长度为9的字符串
NSString *str4 = [NSString stringWithFormat:@"2345678901"];//用stringWithFormat方法创建一个  固定长度为10的字符串

NSString *str5 = [[NSString alloc] initWithString:@"345678901"];//用initWithString方法创建一个  固定长度为9的字符串
NSString *str6 = [[NSString alloc] initWithString:@"3456789012"];//用initWithString方法创建一个  固定长度为9的字符串

NSString *str7 = [[NSString alloc] initWithFormat:@"456789012"];//用initWithFormat方法创建一个  固定长度为9的字符串
NSString *str8 = [[NSString alloc] initWithFormat:@"4567890123"];//用initWithFormat方法创建一个  固定长度为9的字符串

NSString *str9 = [NSString stringWithFormat:@"1234567890"];//用stringWithFormat方法创建一个  固定长度为10的字符串并与str2字符串一样的字符串
NSString *str10 = [[NSString alloc] initWithString:@"1234567890"];//用initWithString方法创建一个  固定长度为10的字符串并与str2字符串一样的字符串

NSLog(@"str1 用@"" 的retainCount为:%ld \n  对象内地地址:%p",[str1 retainCount],str1);
NSLog(@"str2 用@"" 的retainCount为:%ld \n  对象内地地址:%p",[str2 retainCount],str2);
NSLog(@"-----------------------------------------------------------------");
NSLog(@"str3 用stringWithFormat 的retainCount为:%ld \n  对象内地地址:%p",[str3 retainCount],str3);
NSLog(@"str4 用stringWithFormat 的retainCount为:%ld \n  对象内地地址:%p",[str4 retainCount],str4);
NSLog(@"-----------------------------------------------------------------");
NSLog(@"str5 用initWithString 的retainCount为:%ld \n  对象内地地址:%p",[str5 retainCount],str5);
NSLog(@"str6 用initWithString 的retainCount为:%ld \n  对象内地地址:%p",[str6 retainCount],str6);
NSLog(@"-----------------------------------------------------------------");
NSLog(@"str7 用initWithFormat 的retainCount为:%ld \n  对象内地地址:%p",[str7 retainCount],str7);
NSLog(@"str8 用initWithFormat 的retainCount为:%ld \n  对象内地地址:%p",[str8 retainCount],str8);
NSLog(@"-----------------------------------------------------------------");
NSLog(@"使用lu看一下 str1 的retainCount为:%lu \n  对象内地地址:%p",[str1 retainCount],str1);
NSLog(@"使用lu看一下 str4 的retainCount为:%lu \n  对象内地地址:%p",[str4 retainCount],str4);
NSLog(@"-----------------------------------------------------------------");
NSLog(@"str9  字符串与str2一样 的retainCount为:%lu \n  对象内地地址:%p",[str9 retainCount],str9);
NSLog(@"str10  字符串与str2一样 的retainCount为:%lu \n  对象内地地址:%p",[str10 retainCount],str10);

为什么用 @"", stringWithFormat, initWithString, initWithFormat四种方式创建的对象所存在内存区域不同。正常情况下,字符串内容一样,应该取的是同一个内存地址。就像str2与str10一样。

上一篇下一篇

猜你喜欢

热点阅读