您的位置:首页 > 移动开发 > IOS开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xcode 内存 nsstring oc iOS