字符串类型
NSString类,其对象内容不可变。对象化C语言的字符串,用@""表示字面常量。可以与基本数据类型进行转换。
创建字符串 常量:
NSString *str=@"This is a NSString Object";
创建一个空字符串:
NSString *str1=[[NSString alloc] init];
NSString *str2=[NSString string];
用格式化字符串创建一个字符串对象:
NSString *str=[[NSString alloc] initWithFormat:@"%d",3];
NSString *str=[NSString stringWithFormat:@"%f",1.23];
Tips:和C语言中的sprintf类似,都是通过格式化字符串拼装字符串
字符串的比较
比较两个字符串对象的类容是否相同:
NSString *str1=@"abc";
NSString *str2=@"abc";
if([str1 isEqualToString: str2]){
NSLog(@"相同");
}
比较两个字符串对象是否为同一个对象
<pre name="code" class="objc">NSString *str1=@"abc";
NSString *str2=@"abc";
if(str1==str2){
NSLog(@"他们是同一个地址");
}
Tips:其本质就是指针变量的值的比较
比较两字符串的大小:
NSString *str1=@"abc";
NSString *str2=@"abc";
NSComparisonResult result=[str1 compare:str2];
if(result == NSOrderedDescending){
NSLog(@"str1 > str2");
}
字符串转换
大小写转换
NSString *str=@"Divein edu"; 调用方法[str uppercaseString]; 将str全部变为大写字母,[str1lowercaseString];将str全部变为小写字母,
[str1 capitalizedString]);每个单词首字母大写。
把字符串转换成基本数据类型
int a=[str intValue]; 其他都类似于转换成int值类型
把字符串转换为数组
NSString *str=@"2013.04.05.06";
NSArray *arr=[str componentsSeparatedByString:@"."];
取子串
NSString *str = @"www.diveinedu.com";
//从开始位置截断到指定的index位置,不包含该index位置的字符
NSString *substr = [str substringToIndex:3];// @"www”
//从指定的index位置开始,截取到字符串末尾,包括该index位置的字符
NSString *substr1 = [str substringFromIndex:4];// @"diveinedu.com”
NSRange range = {4,9};
//从index为4开始,取9个字符长度, // @"diveinedu"
NSString *substr2 = [str substringWithRange:range];
字符串连接
NSString *str = @"http://";
NSString *str1 = @"www.diveinedu.com";
NSString *url = [NSString stringWithFormat:@"%@%@", str, str1];
NSString *url1 = [str stringByAppendingString:str1];
NSString *url2 = [str stringByAppendingFormat:@"%@", str1];
//以上url url1 url2 三个字符串的内容都是一样的.三种不同的拼接方式
字符串查找
NSString *url = @"www.diveinedu.com";
NSRange r = [url rangeOfString:@"divein"];
if(r.location != NSNotFound)
{
NSLog(@"报告,我找到divein了,他躲在%ld的位置", r.location);
}
深浅拷贝
深浅拷贝前提是:是实现NSCopying或者NSMutableCopying协议。
浅拷贝只是复制对象本身,对象的属性和包含的对象不做复制。
深拷贝则对对象本身复制,同是对 对象的属性也进行复制。
深浅拷贝的本质区别是对象或者对象属性的内存地址是否一样,一样则为浅拷贝,不一样则为深拷贝。
Foundation框架支持复制的类,默认是浅拷贝。其中对Foundation中不可变的对象进行copy时作用相当于retain。
而如果是mutablecopy时,无论对象是否可变,副本是可变的,并且实现了真正意义上的copy。如果对可变对象进行copy,
副本对象是不可变的,同样是真正意义上的copy。