//字符串是特殊的对象 需要用copy 其他的对象可以用 copy 或 retain
 
// NSMultibleString
可变字符串  
用initWithString 来初始化并赋值并需要手动回收不能直接等号赋值
遵循引用计数概念
 4、可以 增、 删、 改、 插,可以改变原来字符串内容。
 5、在使用父类NSString方法时 需要有接收者 因为NSString方法是有返回值的
常用的函数有:
- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc;
- (void)deleteCharactersInRange:(NSRange)range;
- (void)appendString:(NSString *)aString;
- (void)appendFormat:(NSString *)format;
- (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString;  //  NSMakeRange(loc, length);
 
// NSString 
1、不可变字符串 
2、可以直接赋值 系统自动回收垃圾 
3、不遵循引用计数概念
 4、可以在首尾部 增添字符串,不能删、 改、 插,不可改变原字符串中的内容。
 NSString *str1 = @"BeiJing";
 NSString *str2 = @"beijing";

 //全部转为大写
 NSLog(@"%@",[str1 uppercaseString]);

 //全部转为小写
 NSLog(@"%@",[str1 lowercaseString]);

 //首字母大写
 NSLog(@"%@",[str1 capitalizedString]);

 //比较两个字符串内容是否相同
 BOOL b =[str1 isEqualToString:str2];

 //两个字符串内容比较
 //NSOrderedAscending 右边 > 左边
 //NSOrderedSame 内容相同
 //NSOrderedDescending 左边 > 右边
 NSComparisonResult result = [str1 compare:str2];
 if (result == NSOrderedAscending) {
 NSLog(@"右边 > 左边");
 }else if(result == NSOrderedSame){
 NSLog(@"内容相同");
 }else if (result == NSOrderedDescending){
 NSLog(@"左边 > 右边");
 }

 //忽略大小写进行比较,返回值与compare一样
 result = [str1 caseInsensitiveCompare:str2];
 if (result == NSOrderedAscending) {
 NSLog(@"右边 > 左边");
 }else if(result == NSOrderedSame){
 NSLog(@"内容相同");
 }else if (result == NSOrderedDescending){
 NSLog(@"左边 > 右边");
 }

 //判断字符串是否以指定字符串开头
 [str1 hasPrefix:@"aaa"];
 //判断字符串是否以指定字符串结尾
 [str1 hasSuffix:@"aaa"];

 //判断字符串是否包含指定字符串,返回位置和长度
 NSRange range = [@"123456" rangeOfString:@"456"];
 NSLog(@"%@", NSStringFromRange(range));

 //反向搜索
 range = [@"123456456qweasasd456" rangeOfString:@"456" options:NSBackwardsSearch];
 NSLog(@"%@",NSStringFromRange(range));

 //指定范围进行搜索
 range = NSMakeRange(0, 9);
 range = [@"123456456qweasasd456" rangeOfString:@"456" options:NSBackwardsSearch range:range];
 NSLog(@"%@",NSStringFromRange(range));//字符串的截取
 NSString *str = @"123456789";
 NSLog(@"%@",[str substringFromIndex:3]);
 NSLog(@"%@",[str substringToIndex:6]);
 NSLog(@"%@",[str substringWithRange:NSMakeRange(3, 3)]);

 //用指定字符串分割字符串,返回一个数组
 NSArray *array = [@"1,2,3,4,5,6" componentsSeparatedByString:@","];
 NSLog(@"%@",array);

 //将数组中的字符串组合成一个文件路径
 NSMutableArray *components = [NSMutableArray array];
 [components addObject:@"Users"];
 [components addObject:@"CentralPerk"];
 [components addObject:@"Desktop"];
 NSString *path = [NSString pathWithComponents:components];
 NSLog(@"%@",path); //Users/CentralPerk/Desktop

 //将一个路径分割成一个数组
 NSArray *array1 = [path pathComponents];
 NSLog(@"%@",array1);

 //判断是否为绝对路径(依据:是否以'/'开始)
 path = @"/Users/CentralPerk/Desktop";
 NSLog(@"%i",[path isAbsolutePath]);

 //获取最后一个目录
 NSLog(@"%@",[path lastPathComponent]);

 //删除最后一个目录
 NSLog(@"%@",[path stringByDeletingLastPathComponent]);

 //拼接一个目录
 NSLog(@"%@",[path stringByAppendingPathComponent:@"aaa"]); ///Users/CentralPerk/Desktop/aaa
 NSLog(@"%@",[path stringByAppendingString:@"aaa"]); ///Users/CentralPerk/Desktopaaa
 NSLog(@"%@",[path stringByAppendingFormat:@"%@%@",@"b",@"c"]); ///Users/CentralPerk/Desktopbc

 //拓展名出来
 //获取拓展名,不带.
 NSString *str2 = @"Users/CentralPerk/Desktop/test.txt";
 NSLog(@"%@",[str2 pathExtension]);
 //添加拓展名,不需要带.
 NSLog(@"%@",[str2 stringByAppendingPathExtension:@"mp3"]);
 //删除拓展名,带.一块删除
 NSLog(@"%@",[str2 stringByDeletingPathExtension]);

 //字符串转为 int double float
 NSString *str3 = @"123";
 NSLog(@"%i",[str3 intValue]);
 NSLog(@"%zi",[str3 length]);

 //取出指定位置的字符
 unichar c = [str3 characterAtIndex:2];
 NSLog(@"%c",c);

 //转为C语言的字符串
 const char *s = [str3 UTF8String];
 NSLog(@"%s",s);//用问号将多个字符串连接起来
NSArray *arr = [NSArray alloc]initWithObjects:str1,str2,str3,nil];
NSString *str = [arr componentsJoinedByString:@"?"];
//将字符串以指定字符串为标志分割
 NSString *str5 = @"we,she,he?hello?and,you?please";
NSArray *arr2 = [str5 componentsSeparatedByString:@"?"];
arr2 = (we,she,he,
    hello,
    and,you,
    please);
 //再利用分割即可获得 @“we” 字符串
 
//类方法使用后不用手动释放 系统可以自动给释放掉