OC中创建字符串的几种方法及Xcode7.3中其存储内存地址的异同
2016-04-12 12:03
489 查看
OC语言中创建字符串的主要方法包括:
1.通过字符串常量直接创建:NSString *str1 = @"xjq";
该方法是直接在常量存储区开辟一块内存空间用于字符串的存储,str1为该存储空间的地址。
2.通过alloc与initWithFormat创建:
NSString *str2 = [[NSString alloc] initWithFormat:@"xjq"];
该方法在堆内存中开辟一块存储空间,str2为该存储空间的地址。
3.通过alloc与initWithString创建:
NSString *str3 = [[NSString alloc] initWithString:@"xjq"];
创建一个具有只读数据的常量字符串,与“1.通过字符串常量直接创建”相同。事实上Xcode7.3编译器中,如果使用了alloc + initWithString方法,会显示提示,建议修改为字符串常量创建。
4.通过类工厂方法:stringWithFormat创建:
NSString *str4 = [NSString stringWithFormat:@"xjq"];
类工厂方法内部封装了alloc init方法,与2.通过alloc与initWithFormat创建相同。
对相同数据的储存:
对于Xcode7.3,不管是在OS X工程还是iOS工程中,借由编译器自身的优化,若在常量存储空间或堆存储空间内存储同4000
一组字符串,Xcode会将指针指定同一个地址,减少系统占用。
//1.通过字符串常量创建对象 NSString *str1 = @"xjq"; NSString *str11 = @"xjq"; NSLog(@"*str1的内存地址为%p,*str11的内存地址为%p",str1,str11); //2.通过alloc与initWithFormat创建 NSString *str2 = [[NSString alloc] initWithFormat:@"xjq"]; NSString *str22 =[[NSString alloc] initWithFormat:@"xjq"]; NSLog(@"*str2的内存地址为%p,*str22的内存地址为%p",str2,str22); //3.通过alloc与initWithString创建 NSString *str3 = [[NSString alloc] initWithString:@"xjq"]; NSString *str33 =[[NSString alloc] initWithString:@"xjq"]; NSLog(@"*str3的内存地址为%p,*str33的内存地址为%p",str3,str33); //4.通过类工厂方法:stringWithFormat创建 NSString *str4 = [NSString stringWithFormat:@"xjq"]; NSString *str44 =[NSString stringWithFormat:@"xjq"]; NSLog(@"*str4的内存地址为%p,*str44的内存地址为%p",str4,str44);
以上代码输出为:
2016-04-12 12:32:39.761 字符串[3473:3719979] *str1的内存地址为0x100001048,*str11的内存地址为0x100001048 2016-04-12 12:32:39.762 字符串[3473:3719979] *str2的内存地址为0x716a7835,*str22的内存地址为0x716a7835 2016-04-12 12:32:39.762 字符串[3473:3719979] *str3的内存地址为0x100001048,*str33的内存地址为0x100001048 2016-04-12 12:32:39.762 字符串[3473:3719979] *str4的内存地址为0x716a7835,*str44的内存地址为0x716a7835 Program ended with exit code: 0
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- IE7降低内存和降低CPU的几个技巧
- 如何高效的使用内存
- DOS下内存的配置
- XP/win2003下发现1G的内存比512M还慢的解决方法
- PowerShell实现动态获取当前脚本运行时消耗的内存
- C#实现把dgv里的数据完整的复制到一张内存表的方法
- SQL语句实现查询SQL Server内存使用状况
- C语言内存对齐实例详解
- 深入学习C语言中memset()函数的用法
- 全局变量与局部变量在内存中的区别详细解析
- VB读取线程、句柄及写入内存的API代码实例
- php运行提示:Fatal error Allowed memory size内存不足的解决方法
- IE浏览器IFrame对象内存不释放问题解决方法