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

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









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值