• OC知识点归纳


    OC三个常用基础类

    头语:

    新手一枚,在学习过程中,整理自己的笔记,与各位新手大大一起分享,一起进步(PS:其实是怕自己会忘记,又苦于没有钱买笔记本,哈哈),如有错误,望大家提出,我一定最快修改,这仅仅是小生的自我理解,并不想误人子弟,不喜勿喷.

    一.首先,整理一下在OC基础中会接触到的类:

    NSString,NSMutableString

    NSArray,NSMutableArray

    NSDictionary,NSMutableDictionary 以上3组类都是经常会用到的,使用频率非常高,然后就是自定义类等等

    还有一些比如NSData,NSDate,NSFileHandle这些类,用的一般不是很多

    1.NSString和NSMutableString

    1.1NSString:

    //1)最基本的方式
    NSString *str = @"abc";   //常量区
    //2) 类方法创建字符串
    NSString *str2 = [NSString stringWithFormat:@"xxx"];      //堆区
    //3)使用对象方法,来创建字符串
    NSString *str3 = [[NSString alloc]initWithString:@"abc"];//常量区
    
    //4) 把字符串写入到到文件中
    NSString *str4 = @"每当我错过一个女孩,我就向山上放一块砖,于是这个世界就有了长城!";
            
    1.2NSMutableString的用法同理:
    //可变字符串的操作:
            //+(instancestype)string{   return [[[NSMutableString alloc] init] autorelease];}
            
            NSMutableString *str = [NSMutableString string];
            // 1)添加内容到字符串中
            // i, appendString
            [str appendStbaring:@"hello"];
            // ii, 格式化的插入
            int a = 10;
            [str appendFormat:@" a = %d",a];
            // iii.在指定位置处插入字符串
            [str insertString:@"abc" atIndex:2];
            
            // 2)从字符串中删除内容
            // 删除指定范围的 字符串
            //heabcllo a = 10
            [str deleteCharactersInRange:NSMakeRange(2, 3)];
            
            // 3)替换字符串中的内容
            //hello a = 10
            //hesss a = 10
            //当给定的内容大于 我们指定的范围的时候 ,这个时候,以给定的内容为准
            [str replaceCharactersInRange:NSMakeRange(2, 3) withString:@"sssxxxx"];
            
            // 4)查找子字符串 ()
            NSRange r1 = [str rangeOfString:@"ss"];
            NSLog(@"%@",NSStringFromRange(r1));
            
            NSLog(@"str : %@",str); //str:hesssxxxx a = 10
            
            // 重要:
            // 1)NSMutableString 容易犯的错误
            //        NSMutableString     NSString
            NSMutableString *str2     =   @"abc";
            //       运行的时候,str2 ----> NSString
            //编译的时候不会报错,因为str2 是NSMutableString 类型的
            //运行时,会报错
            //  str2 变成了NSString 类型的了
            //  NSString 是不可变的,没有appendString 方法
            [str2 appendString:@"xxxx"];
            // 2)NSMutableString 有一个string的属性,它可以吧字符串内容给覆盖掉
            str.string = @"abc";  //str = abc
            NSLog(@"str : %@",str);
    NSString   不可变:指的是字符串在内存中占用的存储空间固定,并且存储的内容不能发生变化
    NSMutableString   可变:指的是字符串在内存中占用的存储空间可以不固定,并且存储的内容可以被修改

          两者的区别:NSString是不可变的, 里面的文字内容是不能进行修改的,NSMutableString是可变的, 里面的文字内容可以随时更改

     

    2.NSArray和NSMutableArray

    2.1与C数组比较
    NSArray是OC中的数组类, 开发中建议尽量使用NSArray替代C语言中的数组
    C语言中数组的弊端
    int array[4] = {10, 89, 27, 76};
    只能存放一种类型的数据.(类型必须一致)
    不能很方便地动态添加数组元素、不能很方便地动态删除数组元素(长度固定)
    // 1) 使用类方法创建
    NSArray *arr = [NSArray array];  //空数组 没有意义
    // 2) 创建数组,有一个元素 (元素的类型必须是一个OC的对象)
    NSArray *arr1 = [NSArray arrayWithObject:@"abc"];
    // 3) 创建数组,有多个元素
    NSArray *arr2 = [NSArray arrayWithObjects:@"one",@"two",@"three", nil];
    // 4) 可以用一个已经存在的数组,创建一个新的数组
    NSArray *arr3 = [NSArray arrayWithArray:arr2];
    // 5) 快速创建
    NSArray *arr4 = @[@"one",@"two",@"three",@"1",@1];
    
    // 使用对象方法创建数组
    // nil用来标志数组已经结束了
    // 怎么样才能存储一个null
    // [NSNull null];             //打印时是 "<null>"
    NSArray *arr5 = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",[NSNull null],@"5",
    nil];
    // 查看数组的内容
    // 当我们以 %@ 的格式,打印 数组 ,此时得到的是一个(数组元素,数组元素2)
    NSLog(@"%@",arr5);
    
    //NSArray没有addObject这个方法
    
    NSMutableArray *arrayM = [NSMutableArray arrayWithObjects:@"hehe",@"lala",@"haha", nil];
            //给可变数组arrayM添加一个hehe1对象
            [arrayM addObject:@"hehe1"];
            
            NSLog(@"%@
    %@",arr2,arrayM);

      2.2 NSLog打印结果:

    2016-04-27 12:44:05.986 3.14[10393:372743] (
        one,
        two,
        three
    )
    (
        hehe,
        lala,
        haha,
        hehe1
    )

    2.3.总结

    NSArray和NSMutableArray的区别:NSArray是不可变的,一旦初始化完成,其内容是固定的,永远不能修改,也不能删除里面的元素.

    3.NSDictionary和NSMutableDictionary

    3.1NSDictionary

    //创建 对象
    // 1) 类方法
    NSDictionary *dict = [NSDictionary dictionary]; //空字典,不可变,没有意义
    //                                                      value           key
    NSDictionary *dict2 = [NSDictionary dictionaryWithObject:@"zhangsan" forKey:@"zs"];
    // 创建多组元素
    NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2",@"v3",@"k3", nil];
    
    // 2) 对象方法
    NSDictionary *dict4 = [[NSDictionary alloc] initWithObjectsAndKeys:@"v1",@"k1", nil];
    // 注意: 1) 不管是key 还是 value 注意都必须是对象类型(不能是基本数据类型)
    //       2) key的值是不能够重复的,如果键值重复,则后面的不能再添加了
    //       3) 集合元素是无需的
    //       4) 可以通过key值来快速的获取value的值
    // NSLog 以 %@的形式输出 字典,得到的是 {键值对}
    NSLog(@"dict = %@",dict3);
    
    //快速创建字典 (常用)
    NSDictionary *dict5 = @{@"k1":@"v1",@"k2":@"v2",@"k3":@"v3",@"k1":@"v8"};
    NSLog(@"dict5 = %@",dict5);
    
    //访问
    // 1) 获取字典的长度
    NSLog(@"%ld",dict5.count);
    // 2) 根据key值,获取value值
    NSString *str2 = [dict5 objectForKey:@"k2"];
    //NSLog(@"str2 = %@",str2);
    //遍历
    // 1) 快速枚举的方式
    for (id obj in dict5) {
        // 此时遍历的过程中,得到的obj 都是key
        //[dict5 objectForKey:obj]根据key获取value值
        NSLog(@"key = %@, value = %@",obj,[dict5 objectForKey:obj]);
    }
    // 2)使用block的方式
    [dict5 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    
    
        if([key isEqualToString:@"k2"]){
    
    
            *stop = YES;  //遍历停止
        }else{
            NSLog(@"key= %@,value = %@",key,obj);
        }
    
    }];
    
    //字典的遍历不一定是有序的
    
    //检查字典中是否包含指定的key值
    // 获取所有的key
    NSArray *keys = [dict5 allKeys];
    NSLog(@"key = %@",keys);
    if([keys containsObject:@"k1"]){
        NSLog(@"存在");
    }

    NSDictionary没有增删改查,因为是不可变的,它只能获取,遍历.

    3.2NSMutableDictionary:

    //1) 创建 字典
    // 类方法
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    NSMutableDictionary *dict2 = [NSMutableDictionary dictionaryWithObject:@"zhaosi" forKey:@"zs"];
    // 对象方法
    NSMutableDictionary *dict3 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"v1",@"k1",@"v2",@2, nil];
    //快速创建
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    dict.dictionary = @{@"name":@"bob",@"age":@"18"};
    //添加值到字典中
    [dict setObject:@"man" forKey:@"sex"];
    NSLog(@"%@",dict);
    
    //2) 操作字典  增删改查
    [dict setObject:@"v1" forKey:@"k1"];
    [dict setObject:@"v2" forKey:@"k2"];
    [dict setObject:@"v3" forKey:@"k3"];
    //删除元素
    [dict removeObjectForKey:@"k1"];
    [dict removeAllObjects];
    //修改元素
    [dict2 setObject:@"zhangsan" forKey:@"zs"];
    //简写形式
    dict2[@"zs"]=@"zhaosi";
    dict2[@2]= @"vvvvvv2";
    //3) 注意
    NSLog(@"dict = %@",dict2);

    NSMutableDictionary 可以做到增删改查,这是与NSDictionary的区别

    以上三组类,大致的区别是一样的,都是可变与不可变之分,后期会讲到setter(设置)和getter(获取)跟这个道理是一样的,所以在使用过程中,一定要先判断自己需要的对象是可变的还是不可变的.

    未完待续....

  • 相关阅读:
    多个手机号逗号分开
    字符转码
    短信发送AZDG加密算法
    判断手机所属三大运营商 移动、联通、电信
    MD5加密 时间差 流水号等方法
    VS2012的创建单元测试功能
    Oracle数据库操作类及连接方法
    python生成器,函数,数组
    javascript的单线程
    linux下/var/run目录下.pid文件的作用
  • 原文地址:https://www.cnblogs.com/Xebdison/p/5438504.html
Copyright © 2020-2023  润新知