黑马程序员—Objective-C学习—Foundation—集合类和其他类

来源:互联网 发布:淘宝价格法2017 编辑:程序博客网 时间:2024/06/06 07:52

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、集合类

1、NSArray\NSMutableArray

a、有序

b、快速创建(不可变)@[obj1,obj2]

c、快速访问元素:数组名[i]

2、NSSet\NSMutableSet

a、无序

3、NSDictionary\NSMutableDictionary

a、无序

b、快速创建(不可变)@{key1 : value1, key2 : value2}

c、快速访问元素:字典名[key]

4、NSArrayNSSet对比

a、共同点

(1)、都是集合,都能存放多个OC对象

(2)、只能存放OC对象,不能存放非OC对象(基本数据类型:intcharfloat等,结构体,枚举)

(3)、本身都不可变,都有一个可变的子类

b、不同点

(1)、NSArray是有序的,NSSet是无序的

二、NSArray\NSMutableArray

1、NSArray:不可变数组

a、NSArray的创建

(1) 、  // 这个数组永远是空数组

        NSArray *array = [NSArray array];

(2)、   // 一个元素的数组

        NSArray *array2 = [NSArray arrayWithObject:@"jack"];

(3)、   // 多个元素的数组

        NSArray *array3 = [NSArray arrayWithObjects:@"jack",@"rose",nil];

(4)、   //快速创建一个NSArray对象

        NSArray *array4 = @[@"jack",@"jim",@"rose"];

b、获取数组元素个数,输出用%ld

       //[array2 count]

        NSLog(@"%ld", array2.count);

c、获取数组元素

(1)、   //获取数组某个位置对应的对象

        NSLog(@"%@", [array3 objectAtIndex:1]);

(2)、   // 新特性访问方式

        NSLog(@"%@",array3[0]);

d、数组的遍历

(1)、       for (int i = 0; i<array4.count; i++) {

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

(2)、快速遍历       

 for (id objin array4)

        {  // 找出obj元素再数组中的位置

            NSUInteger i = [array4 indexOfObject:obj];

            NSLog(@"%ld-%@",i, obj);

        }

(3)利用block遍历方式

       // [array4 enumerateObjectsUsingBlock:<#^(id obj, NSUInteger idx, BOOL *stop)block#>]

        [array4enumerateObjectsUsingBlock:

        // 每遍历到一个元素,就会调用一次block,并且把当前元素和索引位置当做参数传给block

        // *stop作用是为了退出循环,赋值为YES停止

         ^(id obj,NSUInteger idx,BOOL *stop) {

            NSLog(@"%ld-%@",idx, obj);

             if(idx == 1)

             {   // 停止遍历

                 *stop =YES;// 只有传地址block内部才可利用指针修改外部的BOOL类型变量

             }

         }];//注意分号别忘了

 //NSEnumerationReverse参数为倒序遍历
    [array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"4倒序遍历array:%ld-->%@",idx,obj);
    }];
     
第四种遍历:利用枚举
    NSEnumerator *en = [array objectEnumerator];
    id obj;
    int j = 0 ;
    while (obj = [en nextObject]) {
        NSLog(@"5遍历array:%d-->%@",j,obj);
        j++;
    }

e、使用注意:
(1)、OC数组—只能存放OC对象
(2)、OC数组不能存放nil
(3)、OC数组只能存放OC对象、不能存放非OC对象类型,比如intstructenum
2、NSMutableArray:可变数组
a、创建
(1)、NSMutableArray *array = [NSMutableArrayarray];

(2)、NSMutableArray *array2 = [NSMutableArrayarrayWithObjects:@"rose",@"jack",nil];

(3)、不可以用@[]快速创建NSMutableArray

   // NSMutableArray *array3 = @[@"rose", @"jack"];

b、添加元素

        [array addObject:[[Person alloc]init]];

        [array addObject:@"jim"];

        // 错误写法

       // [array addObject:nil];

c、删除元素

                    // 删除所有对象

        [array removeAllObjects];

       // 删除指定对象

        [array removeObject:@"jim"];

       // 删除对应位置对象

        [arrayremoveObjectAtIndex:1];

三、NSSet\NSMutableSet

1、NSSet

a、创建方法:

(1)、创建一个空的set,不能添加元素

       NSSet *s = [NSSetset];

(2)、NSSet *s1 = [NSSetsetWithObjects:@"jack",@"rose",@"jack1",@"rose1",@"jack2",nil];

b、随机拿一个元素

NSString *str = [s1anyObject];

2、NSMutableSet

a、创建方法

NSMutableSet *s = [NSMutableSetset];

b、添加元素

 [saddObject:@"back"];

c、删除元素

[sremoveObject:@"back"];

四、NSDictionary\NSMutableDictionary

1、NSDictionary

a、key ---> value

     索引 --->文字内容

     里面存储的东西都是键值对

b、创建方式:

(1)、NSDictionary *dict = [NSDictionarydictionaryWithObject:@"jack"forKey:@"name"];

(2)、先定义key数组和对象数组

        NSArray *keys =@[@"name",@"address"];

       NSArray *objects =@[@"jack",@"北京"];

        NSDictionary *dict2 = [NSDictionarydictionaryWithObjects:objectsforKeys:keys];

(3)、NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:

                              @"jack",@"name",

                              @"北京",@"address",

                              @"3243434",@"qq"

                               ,nil];

(4)、编译器特性

NSDictionary *dict4 =@{@"name":@"jack",@"address":@"北京"};//定义用这个

c、获取key对应的value方法

(1)、id obj = [dict objectForKey:@"name"];

(2)、id obj2 = dict2[@"name"];//[] 内放key

d、返回的是键值对的个数

       NSLog(@"%ld",dict2.count);

2、NSMutableDictionary
a、创建方式

NSMutableDictionary *dict =[NSMutableDictionarydictionary];

b、添加键值对

        [dictsetObject:@"jack"forKey:@"name"];

        [dictsetObject:@"北京"forKey:@"address"];

         //将以前的key为@"name"的覆盖

        [dictsetObject:@"rose"forKey:@"name"];

c、移除键值对

[dictremoveObjectForKey:@"address"];

d、数组打印结果用()括住

   字典打印用{}括住,内容为key = value,打印所有键值对

e、不可以用@{}定义一个不可变字典

NSMutableDictionary *dict =@{@"name":@"jack"};

3、字典的遍历

(1)、

        NSArray *keys = [dictallKeys];

       for (int i =0; i<dict.count; i++) {

           NSString *key = keys[i];

           NSString *object = dict[key];            

           NSLog(@"%@ = %@",key, object);

        }

(2)、[dictenumerateKeysAndObjectsUsingBlock:

         ^(id key,id obj,BOOL *stop) {

            NSLog(@"%@ = %@", key, obj);

         }];

4、字典不允许有相同的key,但允许有相同的value(Object),字典是无序的

五、NSNumber和NSValue

1、NSNumber

a、创建number对象,将基本数据类型转为NSNumber对象

       NSNumber *num = [NSNumbernumberWithInt:10];

b、将NSNumber对象变为基本数据类型

       int a = [numintValue];

c、字符串和基本数据类型的转换

        int a =20;        

       NSString *str = [NSStringstringWithFormat:@"%d",a];

       int b = [strintValue];

d、@20 编译器特性,将20包装成一个NSNumber对象
     要区别于NSString对象@“20”
     包装变量int age = 100,@(age)即可
2、NSValue
1、NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue
2、将结构体包装成OC对象(以CGPoint为例),size,range,rect都可以

    CGPoint p = CGPointMake(1010);

NSValue *value = [NSValue valueWithPoint:p];

3、将value转为对应的结构体

CGPoint p2 = [value pointValue];

六、NSDate

1、创建一个时间对象

       NSDate *date = [NSDatedate];// 打印出的是0时区时间

2、离现在时间5秒的时间

        NSDate *date2 = [NSDatedateWithTimeInterval:5sinceDate:date];

3、从1970开始走过的秒数

       NSTimeInterval second = [date2timeIntervalSince1970];

4、date2与当前时间间隔多少秒

        NSTimeInterval second2 = [date2timeIntervalSinceNow];

5、日期格式化类

NSDateFormatter *formatter = [[NSDateFormatteralloc]init];

6、日期格式: y年  M月  d日  H时  m分  s秒   H (24)时  h (12)时

    formatter.dateFormat =@"yyyy-MM-dd HH:mm:ss";

7、Date转String

 NSString *str = [formatterstringFromDate:date];

8、String转Date

 NSSDate *date = [formatter dateFromString:time];// 需定义一个time

0 0
原创粉丝点击