OC--分类--数组--SEL--字典

-----分类--------

扩充类的功能:继承:要增加新类

             分类(类别):不用增加新类

 格式:@interface 类名(分类的名称)

 方法的声明

 @end

 @implementaion 类名(分类的名称)

 方法的实现

 @end

 注意事项:1.类别里面只能写方法  2.类别的名称写在类名后面的()里面

 作用:1.扩充系统类,增加类的功能。

      2.扩充现有类,增加现有类的功能,将复杂的功能进行分组,分别放入不同的类别里面,达到条理清晰,增加可读性,操作性。

 特点:类别里面的方法在使用的时候与本类中的方法同

 使用:1.创建分类

      2.在要使用分类方法的文件中引入分类的头文件

      3.用分类所在的类直接调用分类的方法即可

    

--------------- 匿名分类--------

 格式:@interface 类名()

 成员变量的声明//私有的成员变量

 方法的声明//私有的

 @end

 匿名分类的实现放在原类的实现里面

 注意:1.类名后面的()里为空   2.匿名分类的里面可以声明成员变量

 使用:放在。m文件里面,实现文件的上面

 作用:扩充类的功能,声明一些私有的成员变量及方法

----------- 数组---------

数组  : 与c的数组的区别

     定义:c的数组:存储的时相同的简单数据类型的有序集合

          oc的数组:存储的是相同或不同的对象类型的有序集合。

     区分: c的数组              oc的数组:

           c的数组是简单数据类型  oc的数组是对象

           简单数据类型               对象

           相同的                       相同或不同

           都是有序的                 有序的

 oc数组的分类:可变 数组和不可变数组

---------不可变数组------

---创建

        1.创建空的

        NSArray *array1 = [NSArray array];

      2.通过对象方法创建

        NSArray *array2 = [[NSArray alloc]initWithObjects:@"11",@"22",@"33", nil];

        通过其他的数组创建

        NSArray *array3 = [[NSArray alloc]initWithArray:array2];

        3.通过类方法

        NSArray *array4 = [NSArray arrayWithArray:array2];

        NSArray *array5 = [NSArray arrayWithObjects:@"44",@"55",@"66", nil];

        NSArray *array6 = [NSArray arrayWithObject:@"yige"];        

        4.简便方法

        //[]里面是数组元素,

        NSArray *array7 = @[@"88",@"99"];

-------取值---------

--取一个值

注意:不要越界

        NSString *string = [array5 objectAtIndex:1];

        NSString *string1 = array5[1];

        //取多个值

        //<#(NSIndexSet *)#> 是一个索引集合类,可以进行索引的设置

        //包含数组的0,1两个索引值

        NSIndexSet *set = [[NSIndexSet alloc]initWithIndexesInRange:NSMakeRange(0, 2)];

        NSArray *subArray = [array5 objectsAtIndexes:set];

        NSLog(@"subArray:%@",subArray);

--普通遍历

        for (int i = 0; i< [array5 count]; i++) {

            NSLog(@"%@",array5[i]);

        }

--快速遍历

        //原理:从 in 后面的数组中逐一的取出元素,赋给 in 前面的对象指针

        for (NSString *string in array5) {

            NSLog(@"%@",string);

        }

--判断数组中是否包含某个元素

        BOOL isExt = [arrayCar containsObject:car1];

--------可变数组-----------------

可变数组 继承自不可变数组

--创建

        1、空可变数组

        NSMutableArray *mutArray1 = [[NSMutableArray alloc]initWithCapacity:10];

        //这样不行,创建的还是不可变数组

        //NSMutableArray *mutArray2 = @[@"11",@"33"];

        NSMutableArray *mutArray2 = [[NSMutableArray alloc]initWithArray:@[@"11",@"22"]];

---------增,删,改,查

---增

        1、增加一个

        //总计:都是在最后增加

        [mutArray2 addObject:@"33"];

        NSLog(@"mutArray2:%@",mutArray2);        

        2、添加很多个

        [mutArray2 addObjectsFromArray:arrayCar];

        3、中间增加(指定索引)

        [mutArray2 insertObject:@"88" atIndex:1];

注意:前面数组的元素个数与索引的元素个数要相等

        NSArray *array10 = @[@"77"];

        NSIndexSet *set2 = [[NSIndexSet alloc]initWithIndex:3];

        [mutArray2 insertObjects:array10 atIndexes:set2];

---删除

        1、删除最后一个元素

        [mutArray2 removeLastObject];

        2、按照指定位置删除

        [mutArray2 removeObjectAtIndex:2];

        3、删除所有同名的元素

        [mutArray2 removeObject:@"88"];

        4、删除指定范围内的同名元素

        [mutArray2 removeObject:@"88" inRange:NSMakeRange(0, 5)];

注意:原数组中会讲子数组的在大数组中有的元素删除,没有的不管,没有顺序

        NSArray *array20 = @[@"11",@"77",@"222",@"88"];

        [mutArray2 removeObjectsInArray:array20];        

---改

        [mutArray2 setArray:arrayCar];

---查 遍历        

        //排序(冒泡排序)

        NSMutableArray *mutArray3 = [[NSMutableArray alloc]initWithArray:@[@"44",@"22",@"55",@"11",@"33"]];

        //降序

        //记住:比较字符串的时候一定要用方法

        for (int i = 0; i<[mutArray3 count]-1; i++) {

            for (int j = 0; j<[mutArray3 count]-i-1; j++) {

                if ([mutArray3[j] compare:mutArray3[j+1]] == NSOrderedAscending) {

                    //将两个元素位置交换  交换方法

                    [mutArray3 exchangeObjectAtIndex:j withObjectAtIndex:j+1];

                }}}        

---替换的方法

        //第一个range是大范围  第二个是需要替换的范围  array:需要替换成的数组

        //注意:第二个range的范围要在第一个的内部

        [mutArray3 replaceObjectsInRange:NSMakeRange(0, 3)   withObjectsFromArray:@[@"00"] range:NSMakeRange(0, 1)];

        //分割

        NSString *normalString = @"12#3452#78#";

        //1以分割字符串整体进行分割

        NSArray *newArray = [normalString componentsSeparatedByString:@"#"];

         NSLog(@"newArray:%@",newArray);        

---NSCharacterSet 字符集合

        //注意:在原字符串动中有有分割字符串

        //2将字符#存入set5

        NSCharacterSet *set5 = [NSCharacterSet characterSetWithCharactersInString:@"#"];

        //将字符集2#存入set6

        NSCharacterSet *set6 = [NSCharacterSet characterSetWithCharactersInString:@"2#"];

        NSArray *newArray1 = [normalString componentsSeparatedByCharactersInSet:set6];

注意:不可变数组不能进行删除操作

        NSMutableArray *newmutArray1 = [[NSMutableArray alloc]initWithArray:newArray1];

        //删除数组中的所有空元素

        [newmutArray1 removeObject:@""];        

        //数组元素合成字符串

        //参数代表合成字符串后,以参数的合成字符串将数组的原个元素隔开

        NSString *stringJoin = [newmutArray1 componentsJoinedByString:@""];        

        //数组拼接成数组        

        //将 @“I” @“Love” @“You”拼接成 @“I Love You”

        NSArray *arrayJoin1 = @[@"I",@"Love",@"You"];        

        NSString *stringJoin1 = [arrayJoin1 componentsJoinedByString:@" "];        

        //用可变数组保存车的信息

        Car *car11 = [[Car alloc]initWithColor:ColorWithRed andName:@"baoma"];        

        Car *car22 = [[Car alloc]initWithColor:ColorWithWhite andName:@"kaidilake"];        

        Car *car33 = [[Car alloc]initWithColor:ColorWithGolden andName:@"falali"];

        NSMutableArray *carMutArray = [[NSMutableArray alloc]init];

        //将元素对象添加到数组

        [carMutArray addObject:car11];

        [carMutArray addObject:car22];

        [carMutArray addObject:car33];        

------NSNumber------

作用:将简单数据转化成对象  因为在OC的数组和字典等中存储的都是对象

  int weight = 40;

  NSNumber *intNum = [[NSNumber alloc]initWithInt:weight];

  NSArray *arr = @[intNum];

  NSNumber 与  int之间的转化

  int nowInt = [intNum intValue];

-------SEL-----------

  专门存储方法的数据类型  格式:@selector(方法)

  容错处理:

  SEL sel1= @selector(eat:);

  if([dog respondsToSelector:sel1]){[dog performSelector:sel1];}

---数组的排序

//降序

-(BOOL)isYoungerThanotherStudent:(Student *)student{

    //比较条件

    return self.age < student.age;

}

        [myClass.students swortUsingSelector:@selector(isYoungerThanotherStudent:)];

-------------字典-----------

字典:是对象,是一种存储数据的对象

         形式:键(key)-值(value)对 的形式保存数据,字典没有顺序之说。

         分类:可变字典,不可变字典

-----不可变字典

        创建

        1.空的

        NSDictionary *dictionary1 = [NSDictionary dictionary];

        2.通过对象方法

        //一般key都是字符串

注意:字典也是以nil结尾

        NSDictionary *dic2 = [[NSDictionary alloc]initWithObjectsAndKeys:@"apple",@"1",@"orange",@"2", nil];

        //objects:所有的值  forKeys:所有的键(key)

        NSDictionary *dic3 = [[NSDictionary alloc]initWithObjects:@[@"apple",@"orange"] forKeys:@[@"1",@"2"]];                

        3、类方法

        NSDictionary *dic4 = [NSDictionary dictionaryWithObjects:@[@"apple",@"orange"] forKeys:@[@"1",@"2"]];        

   

  添加一个元素

        NSDictionary *dic5 = [NSDictionary dictionaryWithObject:@"apple" forKey:@"1"];        

        1、快速创建

        //@{键:值,键:值}

        NSDictionary *dic6 = @{@"1": @"apple",@"2":@"orange"};        

        2、取元素

        NSString *string = [dic3 objectForKey:@"1"];        

        2.1、取所有的key

        NSArray *keys = [dic3 allKeys];

        2.1、取所有的value

        NSArray *values = [dic3 allValues];        

        3、遍历

        for (int i = 0; i<[dic3 count]; i++) {

            NSString *key = [NSString stringWithFormat:@"%i",i+1];

            NSLog(@"%@",[dic3 objectForKey:key]);        }        

        3.1、快速遍历

        //in前面是key

        for (NSString *key in dic3) {

            NSLog(@"%@",[dic3 objectForKey:key]);        }         

----例子

         通讯录

         张三   12345  男

         李四   234344 女

         王五   08909  男

        NSDictionary *dic7 = @{@"张三":@[@"12345",@"男"],

                               @"李四":@[@"234564",@"女"],

                               @"王五":@[@"08909",@"男"]

                               };

        for (NSString *key in dic7) {

            //快速取值:dic7[写键]

            NSArray *array = dic7[key];            

            NSLog(@"%@的电话是%@,性别是:%@",key,array[0],array[1]);

        }

------------------------可变字典

        //创建 空可变字典

        NSMutableDictionary *mutDic1 = [[NSMutableDictionary alloc]initWithCapacity:20];

        //操作

        1、增

        [mutDic1 addEntriesFromDictionary:dic7];        

        1.1、增加一个

        [mutDic1 setObject:@"banana" forKey:@"55"];        

    2、删

        [mutDic1 removeObjectForKey:@"55"];        

        2.1、删多个

        [mutDic1 removeObjectsForKeys:@[@"1",@"2"]];        

        2.2删全部

        [mutDic1 removeAllObjects];        

        3、改

        [mutDic1 setObject:@"pair" forKey:@"55"];

        4、查 --遍历

 

posted on 2014-12-22 17:18  溜逗~~  阅读(123)  评论(0编辑  收藏  举报

导航