------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、NSMutableString的介绍和使用
1、NSMutableString的基本概念
NSMutableString类继承NSString类,那么NSString提供的方法在NSMutableString中基本都能使用,NSMutableString好比一个字符串链表,它可以任意的动态在字符串中添加字符,删除字符,指定位置插入字符,使用它来操作字符串会更加灵活。
NSMutableString和NSString的区别:
NSString是不可变的,里面的文字内容是不能进行修改的
NSMutableString是可变的,里面的文字内容可以随时更改
NSMutableString能使用NSString的所有方法
2、字符串的可变和不可变
不可变:指的是字符串在内存中占用的存储空间固定,并且存储的内容不能发生变化。
可变:指的是字符串在内存中占用的存储空间可以不固定,并且存储的内容可以被修改。
看以下代码,可以更好地解释NSMutableString可变和NSString不可变
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//字符串存在于常量区,字符串内容不能变
//指’指向的“jingwang”地址
NSString *str = @"jingwang";
NSLog(@"straddr=%p",str);
//指’指向“yuwang”地址
str = @"yuwang";
NSLog(@"straddr=%p",str);
//创建<span style="font-family: Arial, Helvetica, sans-serif;">NSMutableString 字符串,</span><span style="font-family: Arial, Helvetica, sans-serif;">存在堆区</span>
NSMutableString *str1 = [NSMutableString stringWithFormat:@"suzhe"];
NSLog(@"str1addr=%p",str1);
//格式化的添加字符串
[str1 appendString:@"meichangsu"];
NSLog(@"str1为%@",str1);
NSLog(@"str1addr=%p",str1);
//因此,NSMutableString字符串是可变的
}
return 0;
}
打印:2015-10-25 21:31:56.202 NSMutableString的介绍和使用2[379:303] straddr=0x100001048
2015-10-25 21:31:56.204 NSMutableString的介绍和使用2[379:303] straddr=0x100001088
2015-10-25 21:31:56.205 NSMutableString的介绍和使用2[379:303] str1addr=0x100500e40
2015-10-25 21:31:56.206 NSMutableString的介绍和使用2[379:303] str1为suzhemeichangsu
2015-10-25 21:31:56.206 NSMutableString的介绍和使用2[379:303] str1addr=0x100500e40
由打印结果可以看出,str指针一开始指向的是字符串“jingwang”的地址straddr=0x100001048,后来指向字符串“yuwang”的地址straddr=0x100001088,这两个地址不相等,就是说,这两个字符串是存储在常量区,是不可变的。而str1则使用NSMutableString字符串,修改字符串内容之后,打印地址是相等的,就是说字符串长度和内容是可变的。
3、创建方法和常用方法
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSMutableString *str = [NSMutableString string];
//1)格式化的添加字符串
[str appendFormat:@"http://www.baidu.com/%d",200];
NSLog(@"str=%@",str);
//2)删除字符串一部分内容
[str deleteCharactersInRange:NSMakeRange(5, 6)];
NSLog(@"str=%@",str);
//3)插入一个字符串
[str insertString:@"xinlang" atIndex:6];
NSLog(@"str=%@",str);
//4)替换字符串一部分
[str replaceCharactersInRange:NSMakeRange(5, 6) withString:@"wangyi"];
NSLog(@"str=%@",str);
//5)查找一个字符
NSRange range = [str rangeOfString:@"i"];
NSLog(@"%@",NSStringFromRange(range));
//在指定范围内查找字符
NSRange range2 = [str rangeOfString:@"i" options:0 range:NSMakeRange(1, 2) ];
NSLog(@"%@",NSStringFromRange(range2));
}
return 0;
}
打印:
2015-10-25 21:35:48.656 NSMutableString的常用方法[472:303] str=http://www.baidu.com/200
2015-10-25 21:35:48.664 NSMutableString的常用方法[472:303] str=http:baidu.com/200
2015-10-25 21:35:48.666 NSMutableString的常用方法[472:303] str=http:bxinlangaidu.com/200
2015-10-25 21:35:48.668 NSMutableString的常用方法[472:303] str=http:wangyingaidu.com/200
2015-10-25 21:35:48.670 NSMutableString的常用方法[472:303] {10, 1}
2015-10-25 21:35:48.673 NSMutableString的常用方法[472:303] {19, 1}
4、使用NSMutableString的注意事项
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//注意事项
//1)不可以给可辨字符串赋值不可变值
// NSMutableString *str1 = @"feiliu";
// [str1 appendFormat:@"xxx"];
// NSLog(@"str1=%@",str1);
//2)使用.string=@“”会将原来字符串内容给覆盖了
NSMutableString *str2 = [NSMutableString stringWithFormat:@"meichangsu"];
str2.string = @"";
[str2 appendFormat:@"yyy"];
NSLog(@"str2=%@",str2);
//3)开发中绝大多数用到的都是NSString
//只是如果需要特殊处理的时候(截取拼接替换),才考虑使用
//NSMutableString
}
return 0;
}
二、NSMutableArray 的介绍和使用
1、NSMutableArray介绍
和NSMutableString类似,NSMutableArray是NSArray的子类,NSArray是不可变的,一旦初始化完毕后,它里面的内容就是永远是固定的,不能删除里面的元素,也不能往里面添加元素。NSMutableArray是可变的,随时可以往里面添加、更改、删除元素。
2、NSMutableArray的创建和常见使用方法
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//创建数组
//1)创建数组
NSMutableArray *arry1 = [NSMutableArray array];
//创建数组,并且初“化一 元素
NSMutableArray *arry2 = [NSMutableArray arrayWithObject:@"one"];
//创建数组,并且初“化多 元素
//不正确的写法:这是不可变数组 写法
//NSMutableArray *arry3 = @[@1,@2,@tow];
NSMutableArray *arry3 = [NSMutableArray arrayWithObjects:@"one",@"tow",@"three", nil];
//创建空数组,并指定数 长度
NSMutableArray *arry4 = [NSMutableArray arrayWithCapacity:7];
//2)添加元素
[arry1 addObject:@"WangJing"];
NSLog(@"%@",arry1);
//指定位置插入元素
[arry1 insertObject:@"SuchangMei" atIndex:0];
NSLog(@"%@",arry1);
//3)删除元素
//根据对象内容删除
[arry1 removeObject:@"WangJing"];
//根据位置删除
[arry1 removeObjectAtIndex:0];
//全部删除
[arry1 removeAllObjects];
//4)修改元素
[arry3 replaceObjectAtIndex:2 withObject:@"six"];
//简单改法
arry3[2]=@"five";
//5)查找元素
BOOL isSearch = [arry3 containsObject:@"tow"];
if(isSearch)
{
NSLog(@"存在");
}
else{
NSLog(@"不存在");
}
//6)交换数组元素
NSMutableArray *arry5 = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil];
[arry5 exchangeObjectAtIndex:0 withObjectAtIndex:4];
NSLog(@"%@",arry5);
}
return 0;
}
3、NSMutableArray的错误用法
不正确的写法,这是不可变数组 写法
NSMutableArray *arry3 = @[@1,@2,@tow];//错误创建,赋予了不可变的数组值
NSMutableArray *arry3 = @[@"one",@"tow",@"three"];//错误,赋予了不可变数组
正确的写法:
NSMutableArray *arry1 = [NSMutableArray @[@1,@2,@two]; //正确写法
NSMutableArray *arry1 = [NSMutableArray @[@"one",@"two",@"three"]; //正确写法