• OC本学习笔记Foundatio框架集


       

    一、OC数组
            OC数组是一个类,它也分不可变数组NSArray和可变数组NSMutableArray。


        1➣不可变数组的创建

        // 创建一个不可变数组。元素为一个OC字符串对象 @"小桥"
        NSArray *array1 = [NSArray arrayWithObject:@"小桥"];
        
        // 创建一个不可变数组,元素为多个OC字符串对象
        NSArray *array2 = [NSArray arrayWithObjects:@"葬花 桥", @"120岁", @"来自武汉" , nil];
           // 高速创建一个不可变数组
        NSArray *array3 = @[@"葬花 桥", @"120岁", @"来自武汉"]; // 这是Xcode的一个特性。它会把这句自己主动转换成上面那句
               高速创建数组@[]和 @"" 一样都是Xcode会自己主动替换成完整的语句。后面还有非常多其他的,像@{}等等。
         
    2➣OC数组的元素个数统计
            在C中的数组中。数组的下标就是数组元素的个数,OC数组中提供了count对象方法,如:
           

            // 输出array3的元素个数
            NSLog(@"数组元素个数=%ld", array3.count);

             array3.count  调用数组的count方法就会返回元素的个数。

      
         3➣OC数组的訪问
            C数组的訪问非常easy。a[i] 
       这就是訪问数组a的第 i  个元素,OC数组中訪问指定元素例如以下:

            // 訪问数组元素
            NSLog(@"第%d个元素为%@", 0, [array3 objectAtIndex:0]);
       苹果官方为和简化。又提供了Xcode的新特性,OC数组的訪问变得简单。能够和C数组有一样的写法:
    NSLog(@"第%d个元素为%@", 1 , array3[1]);<span style="font-family: Menlo; line-height: 1.6;"> </span>
       简化的写法依旧是编译器自己主动替换成上一个写法,所以尽管写法一样但本质不同。


        4➣OC数组的遍历
            1.C中的数组遍历也能够用在OC数组中:

            // 1.传统遍历方法
            for (int i=0; i<array3.count; i++)
            {
                NSLog(@"第%d个元素---%@", i, array3[i]);
            } 
                这是面向过程的数组遍历,以下两种是面向对象的数组遍历:
            2.
            // 2.OC遍历
            unsigned long i = 0; // 记住当前下标
            for (NSString *obj in array3) // array3中的对象所有是OC字符串,假设不是同一种类型就用 id
            {
                i = [array3 indexOfObject:obj]; // 获取当前元素的下标
                NSLog(@"第%ld个元素---%@", i, obj);
            } 
                这样的遍历不能获取当前的下标,必须定义标志变量 i 
            3.bloc遍历
            // 3.block遍历,调用enumerateObjectsUsingBlock: 方法。传递一个block參数
            [array3 enumerateObjectsUsingBlock:
             ^(id obj, NSUInteger idx, BOOL *stop) // 这些參数由方法enumerateObjectsUsingBlock传递过来
            {
                NSLog(@"第%ld个元素----%@", idx, obj); // 对数组元素的操作在block中进行
            }]; 
                按小桥的理解block遍历并非在block中訪问的OC数组。而在 enumerateObjectsUsingBlock:这种方法中。当中                   的for循环中获取数组当前元素赋值给obj,而我们能够在block參数中写我们要运行的一些代码来操作数组元素,enumerateObjectsUsingBlock:方法每循环一次就调用一次block运行我们的代码,当中 *stop是一个地址传递的标志參数,能够控制循环是否继续下去,假设在block中赋值为 YES 那么遍历将停止。

         5➣可变数组的创建和使用
            因 为可变数组类是不可变数组类的子类,所以继承了父类的方法。使用同样,小桥这里主要讲下它自己独有的方法。


            加入元素 :

            // 子类有父类的方法
            NSMutableArray *array4 = [NSMutableArray arrayWithObjects:@"葬花", @"桥" , nil];
        
            // 加入元素
            [array4 addObject:@"今天天气又不好"];

            加入元素后数组中就多了一个元素
       删除
    元素 :

                // 删除元素所有元素    
                [array4 removeAllObjects];
        
                // 删除指定元素
                [array4 removeObject:@"桥"];

           这仅仅是两个,还有非常多。小桥就不一一列举了。

    以上就是OC数组的内容。小桥把用到的所有代码拷贝上来:

    //
    //  main.m
    //  OC数组
    //
    //  Created by 葬花 桥 on 14-5-18.
    //  Copyright (c) 2014年 itcast. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    int main()
    {
        /*---------------------------------------------------------------
         数组的创建
         ---------------------------------------------------------------*/
        // 创建一个不可变数组,元素为一个OC字符串对象 @"小桥"
        NSArray *array1 = [NSArray arrayWithObject:@"小桥"];
        
        // 创建一个不可变数组,元素为多个OC字符串对象
        NSArray *array2 = [NSArray arrayWithObjects:@"葬花 桥", @"120岁", @"来自武汉" , nil];
        
        // 高速创建一个不可变数组
        NSArray *array3 = @[@"葬花 桥", @"120岁", @"来自武汉"]; // 这是Xcode的一个特性。它会把这句自己主动转换成上面那句
        // 输出array3的元素个数
        // NSLog(@"数组元素个数=%ld", array3.count);
       
        // 訪问数组元素
        // NSLog(@"第%d个元素为%@", 0, [array3 objectAtIndex:0]);
        // NSLog(@"第%d个元素为%@", 1 , array3[1]);
        
        
        /*---------------------------------------------------------------
         数组的遍历
         ---------------------------------------------------------------*/
        
        // 1.传统遍历方法
        for (int i=0; i<array3.count; i++)
        {
           // NSLog(@"第%d个元素---%@", i, array3[i]);
        }
        
        // 2.OC遍历
        unsigned long i = 0; // 记住当前下标
        for (NSString *obj in array3) // array3中的对象所有是OC字符串。假设不是同一种类型就用 id
        {
            i = [array3 indexOfObject:obj]; // 获取当前元素的下标
            //NSLog(@"第%ld个元素---%@", i, obj);
        }
        
        // 3.block遍历,调用enumerateObjectsUsingBlock: 方法,传递一个block參数
        [array3 enumerateObjectsUsingBlock:
         ^(id obj, NSUInteger idx, BOOL *stop) // 这些參数由方法enumerateObjectsUsingBlock传递过来
        {
            // NSLog(@"第%ld个元素----%@", idx, obj); // 对数组元素的操作在block中进行
            if (idx == 1)
            {
                *stop = YES; // 当当前索引为 1 时停止遍历
            }
        }];
        
        
        /*---------------------------------------------------------------
         可变数组的创建和使用
         ---------------------------------------------------------------*/
        // 子类有父类的方法
        NSMutableArray *array4 = [NSMutableArray arrayWithObjects:@"葬花", @"桥" , nil];
        
        // 加入元素
        [array4 addObject:@"今天天气又不好"];
        
        // 删除元素所有元素
        [array4 removeAllObjects];
        
        // 删除指定元素
        [array4 removeObject:@"桥"];
        
        for (id obj in array4)
        {
            NSLog(@"array4---%@", obj);
        }
        
        return 0;
    } 

    二、NSSet
            NSSet也是一个集合,它和NSArray相似,能够存放多个OC对象,可是不能存放基本数据,本身也不能改变。可是子类能够改变。不同的是,NSSet没有顺序,而NSArray有顺序。
           
     三、NSDictionary
                字典类也是一个集合类,它里面存放的都是键--值对,通过键(key)就能找到值(value)。
         1➣字典的创建和使用
               // 创建单个键值对字典
              NSDictionary *dic = [NSDictionary dictionaryWithObject:@"葬花" forKey:@"姓"];
              // 创建多个键值对的字典
              NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:
                              @"葬花", @"姓",
                              @"桥", @"名",
                              @"44125", @"QQ", nil];
              // 高速创建字典
              NSDictionary *dic3 = @{@"姓" : @"葬花"};
         dic中存放着一个键值对,@"姓" 和 @"葬花" 。通过key索引就能找到相应的值:
            id obj = [dic objectForKey:@"姓"]; 
            // 高速查找值
            id obj3 = dic3[@"姓"];
           2➣可变字典
            和数组一样 ,它的一个子类,也能够在已有的字典上加入键值对,删除键值对。
            
    创建可变字典

            // 创建一个空的字典
            NSMutableDictionary *dic4 = [NSMutableDictionary dictionary];
            // 加入键值对
            [dic4 setObject:@"桥" forKey:@"名字"];
            [dic4 setObject:@"120岁" forKey:@"年龄"];
            [dic4 setObject:@"武汉" forKey:@"地址"];
            [dic4 setObject:@"44125" forKey:@"QQ"];

            删除键值对   
            // 删除键值对
            [dic4 removeObjectForKey:@"年龄"];
         字典遍历    
            // 字典的遍历
            NSArray *keys = [dic4 allKeys]; // 找出全部key
            for (int i=0; i<dic4.count; i++)
            {
                NSString *key4 = keys[i];    
                NSString *obj4 = dic4[key4]; // 找出key相应的value
                NSLog(@"%@ = %@", key4, obj4);
            } 
          // block遍历
            [dic4 enumerateKeysAndObjectsUsingBlock:
             ^(id key, id obj, BOOL *stop)
            {
                NSLog(@"%@ = %@", key, obj);
            }]; 
        数组与字典的嵌套 
                 // 数组中的元素为字典,每一个字典为一个人的信息
                 NSArray *array = @[
                           @{@"姓名" : @"葬花 桥", @"年龄" : @"120岁", @"QQ" : @"44125"},
                           @{@"姓名" : @"SouBanaQiao", @"年龄" : @"20岁", @"QQ" : @"123456"},
                           @{@"姓名" : @"一休", @"年龄" : @"13岁", @"QQ" : @"4568651"}];
        
                // 訪问数组中的字典元素中的键值对
                NSString *str = array[0][@"QQ"]; // 取出数组中的第0个字典元素,再取出字典key相应的value
                NSLog(@"%@", str);
            不难理解,array是一个oc数组,其他的每一个元素为字典对象。注意这里的訪问与C中的二维数组的訪问的差别。这里仅仅是用了编译器特性,它本质上是方法调用。
           还能够再嵌套
             // 数组中的元素为字典,每一个字典为一个人的信息,元素0中的字典中的QQ有两个
             NSArray *array2 = @[
                           @{@"姓名" : @"葬花 桥", @"年龄" : @"120岁", @"QQ" : @[@"44125", @"1234"]},
                           @{@"姓名" : @"SouBanaQiao", @"年龄" : @"20岁", @"QQ" : @"123456"},
                           @{@"姓名" : @"一休", @"年龄" : @"13岁", @"QQ" : @"4568651"}];
        
            // 訪问数组中的字典元素中的键值对
            NSString *str2 = array2[0][@"QQ"][1];
            NSLog(@"%@", str2);
            这里是数组中套字典,再在字典中套数组,第0个元素字典中的QQ键相应的值是一个数组。所以这里会输出
    1234

    小桥最后附上写笔记用到的全部字典代码

    //
    //  main.m
    //  NSDictionary
    //
    //  Created by 葬花 桥 on 14-5-18.
    //  Copyright (c) 2014年 itcast. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    int main()
    {
        /*---------------------------------------------------------------
         字典的创建和使用
         ---------------------------------------------------------------*/
        // 创建单个键值对字典
        NSDictionary *dic = [NSDictionary dictionaryWithObject:@"葬花" forKey:@"姓"];
        // 通过索引找到值
        id obj = [dic objectForKey:@"姓"];
        
        // 创建多个键值对的字典
        NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:
                              @"葬花", @"姓",
                              @"桥", @"名",
                              @"44125", @"QQ", nil];
        // 高速创建字典
        NSDictionary *dic3 = @{@"姓" : @"葬花"};
        // 高速查找值
        id obj3 = dic3[@"姓"];
        
        // NSLog(@"%@", obj3);
        
        /*---------------------------------------------------------------
         可变字典的创建和使用
         ---------------------------------------------------------------*/
        // 创建一个空的字典
        NSMutableDictionary *dic4 = [NSMutableDictionary dictionary];
        // 加入键值对
        [dic4 setObject:@"桥" forKey:@"名字"];
        [dic4 setObject:@"120岁" forKey:@"年龄"];
        [dic4 setObject:@"武汉" forKey:@"地址"];
        [dic4 setObject:@"44125" forKey:@"QQ"];
        
        // 删除键值对
        [dic4 removeObjectForKey:@"年龄"];
        
        // 字典的遍历
        NSArray *keys = [dic4 allKeys]; // 找出全部key
        for (int i=0; i<dic4.count; i++)
        {
            NSString *key4 = keys[i];
            NSString *obj4 = dic4[key4]; // 找出key相应的value
            // NSLog(@"%@ = %@", key4, obj4);
        }
        // block遍历
        [dic4 enumerateKeysAndObjectsUsingBlock:
         ^(id key, id obj, BOOL *stop)
        {
           // NSLog(@"%@ = %@", key, obj);
        }];
        
        /*---------------------------------------------------------------
         字典与数组的嵌套
         ---------------------------------------------------------------*/
        // 数组中的元素为字典,每一个字典为一个人的信息
        NSArray *array = @[
                           @{@"姓名" : @"葬花 桥", @"年龄" : @"120岁", @"QQ" : @"44125"},
                           @{@"姓名" : @"SouBanaQiao", @"年龄" : @"20岁", @"QQ" : @"123456"},
                           @{@"姓名" : @"一休", @"年龄" : @"13岁", @"QQ" : @"4568651"}];
        
        // 訪问数组中的字典元素中的键值对
        NSString *str = array[0][@"QQ"]; // 取出数组中的第0个字典元素。再取出字典key相应的value
        // NSLog(@"%@", str);
        
        // 数组中的元素为字典。每一个字典为一个人的信息,元素0中的字典中的QQ有两个
        NSArray *array2 = @[
                           @{@"姓名" : @"葬花 桥", @"年龄" : @"120岁", @"QQ" : @[@"44125", @"1234"]},
                           @{@"姓名" : @"SouBanaQiao", @"年龄" : @"20岁", @"QQ" : @"123456"},
                           @{@"姓名" : @"一休", @"年龄" : @"13岁", @"QQ" : @"4568651"}];
        
        // 訪问数组中的字典元素中的键值对
        NSString *str2 = array2[0][@"QQ"][1];
        NSLog(@"%@", str2);
        return 0;
    }


    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    Ajax XMLHttpRequest对象的三个属性以及open和send方法
    去空格
    绑定事件中 如可控制函数的执行次数
    我之理解---计时器setTimeout 和clearTimeout
    关于border边框重叠颜色设置问题
    YbtOj练习:二分5 飞离地球
    YbtOj练习:二分4 分割矩阵
    YbtOj练习:二分3 攻击法坛
    YbtOj练习:贪心3 最优密码
    YbtOj练习:二分2 最小时间
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4641172.html
Copyright © 2020-2023  润新知