首页 > 代码库 > IOS知识点总结 一 (NSString)
IOS知识点总结 一 (NSString)
objective-c中用NSString的有关注意事项:
一:声明NSString类型的属性格式
//属性声明为copy,是为传入的参数若是NSMutableString类型的数据做copy处理,使外界参数的改变不影响属性的值。
1 @property (nonatomic,copy) NSString *str;
二:NSString创建
//方法一 str1指针变量指向内存中 文字常量区 的 @"abc" 这个地址。NSString *str1=@"abc";//方法二 虽然用得是alloc方法,但并不是在内存的堆区申请内存,而是在 文字常量区 申请内存。NSString *str2=[[NSString alloc] initWithString:@"abc"];//方法三(方法三 和 方法一 在Xcode中被认为是等效的,如果写第三种方法,则Xcode会建议写成第一种方法) NSString *str3=[NSString stringWithString:@"abc"];//方法四虽没有alloc,但系统会在 堆区 申请内存,引用计数初始化为1. NSString *str4=[NSString stringWithFormat:@"abc"];//方法五用alloc方法,在 堆区 申请内存,引用计数初始化为1. NSString *str5=[[NSString alloc] initWithFormat:@"abc"];
1.在 文字常量区 的地址分配规则:只要值相等,则共用相同的内存区域,那么str1和str2的内存地址是一样的。
2.在 文字常量区 的字符串的 retainCount 被设置为一个非常大得数,所以对处在文字常量区的字符串变量进行 retain 或 release 操作都等同于无效,
这些字符串常量在程序运行过程中一直存在,当程序结束时统一由系统回收管理。
3.str4 和 str5都是在堆区申请内存,只要是在堆区申请的内存,就会有引用计数,两种方法初始化的retainCount都设置为1,虽然两个方法的值都是@"abc",但方法四和方法五在堆区的内存地址是不一样的,即str4和str5是堆区的两块内存区域。
三:NSString的copy和mutableCopy机制
1.不可变字符串的两种copy方式
1 //源字符串2 NSString *str1=@"abc";3 4 //不可变复制,str2和str1都指向 常量区 的@"abc"字符串,str2等同于str15 NSString *str2=[str1 copy];6 7 //可变的复制,此方法在堆区申请内存,复制str1的值。有引用计数,但str3是不可变字符串。8 NSString *str3=[str1 mutableCopy];
2.可变字符串的两种copy方式
//源字符串,创建于堆区NSMutableString *str1=[NSMutableString string];[str1 appendString:@"abc"];//不可变复制NSString *str2=[str1 copy];//可变的复制NSString *str3=[str2 mutableCopy];
str1,str2和str3都在堆区,都有引用计数,retainCount的值为1。
str2和str3都是不可变的字符串。
四:NSString和c字符串的转换
在源代码中NSString字符串是以@开头的,如:@"abc"
在objective-c中c的字符串直接就是引号:"abc"
1.c串 => NSString串 代码示例:
1 //c字符串2 char *s="abc";3 4 //用类方法转换5 NSString *str=[NSString stringWithCString:s encoding:NSUTF8StringEncoding];6 7 //用初始化方法转换8 NSString *str1=[[NSString alloc] initWithCString:s encoding:NSUTF8StringEncoding];
两种方法转换的NSString都创建在 堆区 ,都有引用计数。
2.NSString串 => c串 代码示例:
//源字符串 NSString *str=@"abc";//方法一const char *s1=[str UTF8String];//方法二const char *s2=[str cStringUsingEncoding:NSUTF8StringEncoding];
两种方法的返回值的设定必须是const char * 类型的。
五:字符串和数组的转换
1.字符串转换为数组
//字符串NSString *data=http://www.mamicode.com/@"15,13,18,9,23";//数组NSArray *temp=[data componentsSeparatedByString:@","];
2.数组转换为字符串
//数组NSArray *arr=@[@"1",@"2",@"3"];//字符串NSString *str=[arr componentsJoinedByString:@","];
六:字符串的比较
NSString *str1=nil;NSString *str2=@"this is a string";//比较时必须判断消息的接受者是否为nilif (str1 && [str1 compare:str2] == NSOrderSame){ NSLog(@"相等"); }
IOS知识点总结 一 (NSString)