黑马程序员——OC语言日志——NSMutableString和NSMutableArray 的介绍及使用

来源:互联网 发布:java中集合map 编辑:程序博客网 时间:2024/05/21 09:03

------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"];    //正确写法









0 0