黑马程序员_ Objective-c 之Foundation笔记(二)

NSArray

NSArray的创建

NSArray *array = [NSArray arrayWithObject:@“jack”]   创建单个元素

NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil] 创建多个元素

快速创建一个NSArray对象

NSArray *array4 = @[@"jack", @"rose", @"4324324"]

[array.count ]   计算数组元素的个数

array3[0]

[array3 objectAtIndex:1]  访问数组的元素

注意:OC数组不能存放nil值,nil是数组的结束标记

     OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等

  NSArray *array = [NSArray array] 这个数组永远是空数组

遍历数组

方法一、

Person *p = [[Person alloc] init];

    NSArray *array = @[p, @"rose", @"jack"];

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

       {

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

       }

方法二、

 id obj代表着数组中的每一个元素

    int i = 0;

        for (id obj in array)

        {

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

            NSUInteger i = [array indexOfObject:obj];

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

            //i++;

            if (i==1)

            {

                break;

            }

        }

方法三、

 [array enumerateObjectsUsingBlock:

     // 每遍历到一个元素,就会调用一次block

     // 并且当前元素和索引位置当做参数传给block

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

     {

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

         if (idx == 0)

         {

             // 停止遍历

             *stop = YES;

         }

     }];

NSMutableArray

创建数组

NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil]

添加元素

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

[array addObject:@"jack"];

删除元素

[array removeAllObjects]

删除指定的对象

[array removeObject:@"jack"];

[array removeObjectAtIndex:0];

NSSet

创建

NSSet *s = [NSSet set]

NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil]

随机拿出一个元素

NSString *str =  [s2 anyObject];

NSLog(@"%@", str);

NSMutableSet

NSMutableSet *s = [NSMutableSet set];

添加元素

[s addObject:@"hack"];

删除元素

[s removeObject:<#(id)#>];

NSSet和NSArray的对比

1 共同点

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

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

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

2 不同点

NSArray有顺序,NSSet没有顺序

NSDictionary

字典都是由索引(key)和文字内容组成的(value)

创建不可变字典

方式一、

NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];

方式二、

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

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

NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

方式三、

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:

@"jack", @"name",

@"北京", @"address",

@"32423434", @"qq", nil];

快速创建一个字典

NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};

取出字典某个对象

id obj = [dict objectForKey:@"name"]

快速取出字典某个对象

id obj = dict[@"name"]

可变字典 NSMutableDictionary

NSMutableDictionary *dict = [NSMutableDictionary dictionary]

添加键值对

[dict setObject:@"jack" forKey:@"name"];

移除键值对

[dict removeObjectForKey:@“name”];

遍历字典

方法一、

  NSArray *keys = [dict allKeys];

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

        {

            NSString *key = keys[i];

            NSString *object = dict[key];

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

        }

方法二、

 [dict enumerateKeysAndObjectsUsingBlock:

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

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

         // *stop = YES;

     }];

时间: 2024-10-06 16:16:40

黑马程序员_ Objective-c 之Foundation笔记(二)的相关文章

黑马程序员_集合

集合1.集合和对象数组的区别: 数组的长度不可变,集合的可变: 数组可以存储基本数据类型和对象,集合只能存储对象. 集合的框架图 集合派系的顶层接口Collection1.Collection集合存储对象的方法: add(E e)将元素存储到集合中 addAll(Collection c)将一个集合添加到另外的集合中2.Collection集合提取对象的方法: 通过迭代器iterator中的方法:hasNext()和next()来取出 Iterator it=new iterator(); wh

黑马程序员_学习IOS之字典常用的方法

字典是无序的 数组是有序的.字典分为:可变字典和不可变字典  不可变字典对象 NSDictionary * dict = [[NSDictionary alloc]initWithObjectsAndKeys:@"one",@"1",@"two",@"2",@"three",@"3",@"four",@"4", nil]; //value = ke

黑马程序员_多线程

------- android培训.java培训.期待与您交流! ---------- 多线程1.进程: 正在运行的程序所占有的内存空间,叫做进程. 线程: 一个应用程序中的子程序,对于CPU,子程序可以有一条独立的执行路径,称为线程. 线程特点:依靠一个应用程序,对于其他子程序,独立被CPU执行的2.多线程的好处: 充分利用CPU的资源,程序的同时运行,提高效率3.java中线程创建的两种方法: 第一种: 定义类继承Thread class extends Thread 重写Thread中的r

黑马程序员_交通灯管理系统

(1)项目的需求 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 例如: 由南向而来去往北向的车辆 右转车辆 由东向而来去往南向的车辆 ---- 左转车辆 平时开车过十字路口红绿灯的时候,也知道红绿灯运行的顺序 (1)任何方向的车,向右边转弯的时候,是不需要看红绿灯 (2)在十字路口,相对方向的红绿灯的工作方式是一样的,南相对与北,东相对与西,这把它分成两对 (3)红绿灯顺序,一对直行通道绿灯直行车辆,等直行变红,还是这对的车辆可以左转,等左转变红,就轮到下一对了.所以在设计程序的时候,只

黑马程序员_ 利用oc的协议实现代理模式

先说下代理模式是什么吧 定义: 为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象 而代理对象可以在客户端和目标对象之间起到中介的作用. 在看过李明杰老师的课程后,我对代理模式有了最初步的理解,虽然还很浅显 但是也明白了代理模式的 一些作用跟用法.首先使用代理模式可以降低耦合度.大大的增强了代码的弹性. 举个例子,小明想看电影,但是没时间买票 于是就拜托小强去买票 最简单的方式就是 建立一个person类(小明) 一个agent类(代理类) ag

黑马程序员_银行业务调度系统

1,项目的具体需求 银行业务调度系统 模拟实现银行业务调度系统逻辑,具体需求如下: 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口. 有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费.电话费之类业务的客户). 异步随机生成各种类型的客户,生成各类型用户的概率比例为: VIP客户 :普通客户 :快速客户 = 1 :6 :3.   客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速

黑马程序员_构造函数间的调用

这是我的第一篇博客,从这篇开始我将记录下学习java的心得体会,欢迎志同道合的朋友随时与我讨论,共同进步. 我们都知道,函数间可以互相调用.构造函数是一种特殊的函数,它用来给对象进行初始化,如果想在构造构造函数中调用另一个构造函数,分为以下两种情况: 1.子类调用父类的构造函数 先来看一段代码 1 class Person 2 { 3 public Person() 4 { 5 // 构造语句 6 } 7 } 8 9 class Student extends Person 10 { 11 pu

黑马程序员_毕向东_Java基础视频教程_Java基础学习知识点总结

黑马程序员_毕向东_Java基础视频教程 Java基础学习知识点总结 2016年01月06日  day01 一.基础知识:软件开发 1.什么是软件?软件:一系列按照特定顺序组织的计算机数据和指令的集合. 2.常见的软件:系统软件:如:DOS,Windows,Linux等.应用软件:如:扫雷,迅雷,QQ等. 3.什么是开发?制作软件. 二.基础知识:人机交互方式 4.软件的出现实现了人与计算机之间的更好的交互. 5.交互方式:图形化界面:这种方式简单直观,使用者易于接受,容易上手操作.命令行方式:

黑马程序员_高新技术_1_Java反射

------- android培训.java培训.期待与您交流! ---------- 0.反射知识体系 下图为反射整体的知识体系,把握住此图也就全局上掌握住反射所有内容. 1.反射概论 1)反射概念 其实字面上可以这么理解反射,平时使用类时都是由类new出对象,而反射则是通过对象"反射"出类的信息,好比一个人照镜子可以看到人类的特征,而看出机制就是镜子反射. 2)Java对象两种类型 Java程序中的许多对象在运行时会出现两种类型:编译时类型和运行时类型.如下代码: Person p

黑马程序员_使用Jquery实现AJAX功能

1.AJAX是什么? AJAX技术虽然一直听过,但是真正用起来还是工作有一年了的时候,当时需要实现一个异步更新推送的功能.如:在档案管理系统中,存在代办事项和站内信,而这些模块需要在页面不刷新的情况下定时的反馈给前台待办事项的数量以及简要内容,站内信也是如此.这个时候我认为只有AJAX能够胜任,那AJAX是什么?AJAX是在不重新加载整个页面的情况下与服务器交换数据并更新部分网页的技术. 2.为什么使用Jquery来实现? 学习ASP.NET开始,Jquery的强大已经深深捕获了我,而且我还记着