紧接上文……

4、集合对象

4.1数组

1.基本概念

Foundation中的数组(NSArray,NSMutableArray)是一组有序的对象集合,通过索引下标获取到数组中的各个元素,也分可变和不可变。数组中不可以只存放基本数据类型,只能存放类的实例(对象)。如需要将基本数据类型、结构体放入数组中,需要通过NSNumber、NSValue进行 数据的”封装“。且不能在NSArray中存储nil(对象的零值或者NULL值)

2.不可变数组--NSArray

1) 数组初始化

NSArray *firstArray=[NSArray arrayWithObject:@"one"];

NSArray *secondArray=[NSArray arrayWithObjects:@"one",@"two",nil];  //多数组元素初始化时要以nil作为结束

NSArray *thirdArray=[NSArray arrayWithArray:secondArray];

NSArray *FourArray=[NSArray arrayWithContentsOfFile:path];

2) 常用方法

NSArray *array=[NSArray arrayWithObjects:@"one",@"two",nil];

NSInteger count=[array count];  //获取元素个数

NSString *firstObj=[array objectAtIndex:0];  //根据下标访问对象

NSArray *addArray=[array arrayByAddObject:@"dd"];  //追加对象,返回新数组对象

NSString *arrayStr=[array componentsJoinedByString:@","];  //用指定字符串将数组元素连起来

BOOL isContain=[array containsObject:@"bbb"]l  //数组中是否包含某种对象

NSInteger index=[array indexOfObject:@"ccc"];  //查询指定对象在数组中的元素,如果没有此元素,返回NSNotFound

NSString *lastString=[array lastOfObject];  //获取数组中最后一个元素

3.可变数组——NSMutableArray,继承自NSArray

1)常用方法

NSMutableArray *mutableArray=[NSMutableArray arrayWithCapacity:5];  //初始化,设定元素个数为5,但可以更改

[mutableArray addObject:@"aa"];  //向数组中添加一个元素

[mutableArray insertObject:@"cc" atIndex:0];  //向数组中指定下标插入元素

[mutableArray removeLastObject];  //移除最后一个元素

[mutableArray removeObject:@"aa"];  //移除指定元素

[mutableArray addObjectFromArray:@"aa"];  //向数组中添加数组

[mutableArray replaceObjectAtIndex:0 withObject:@"replace"];  //替换指定的下标元素

[mutableArray removeallObjects];  //移除所有对象

2)遍历数组

常规方法

NSArray *array=[NSArray arrayWithObject:@"a",@"b",@"z",nil];

int length=[array count];

for(int i=0;i<length;i++){  

  NSString *element=[array objectAtIndex:i];

  NSLog(@"%@",element);

}//性能低

快速枚举

for(NSString *string in array){

  NSLog(@"found %@",string);

}//遍历的性能高

for(id string in array){

  NSLog(@"found %@",string);

}//不确定数组元素类型时,可选择id  

4.2 字典

1.基本概念

  是由键-址对组成的数据集合。通过key(键),查找对应value(值),key通常时字符串对象,也可以是其他任意类型对象。在一个字典对象中key的值必须是唯一的。此外字典对象和值不能为空(nil),如果需要在字典中表示空值,可以用NSNull对象。

2.不可变字典——NSDictionary

1)字典初始化方法

NSDictionary *dic=[NSDictionary dictionaryWithObjectAndKeys:numObj,@"valueKey",numObj2,@"valueKey2",nil];  //初始化两个元素

NSDictionary *dic=[NSDictionary dictionaryWithDictionary:otherDic];  //初始化新字典,新字典包含otherDic

NSDictionary *dic=[NSDictionary dictionaryWithContentsOfFile:path];  //以文件内容初始化字典

2)常用方法

NSInteger count=[dic count];  //获取数量

NSObject *valueObj = [dic objectForKey:@"key"];  //通过key获取对应的value对象

NSEnumerator *enumerator =[dic keyEnumerator];  //将字典的key转化成一个每句对象,用于遍历

NSArray *key=[dic allKeys];  //获取所有键的集合

NSArray *values=[dic allValue];  //获取所有值的集合

3.可变字典——NSMutableDictionary继承自NSDictionary

1)常用方法

//初始化一个空的可变字典

NSMutableDictionary *dic2=[NSMutableDictionary dictionaryWithObject:@"v3" forKey:@"key2"];

//向字典2对象中添加整个字典对象3

[dic2 addEntriesFromDictionary :dic3];

//向字典2对象中追加一个新的key3和value3

[dic2 setValue:@"value3" forKey:@"key3"];

//初始化一个空间的可变字典

NSMutableDictionary *dic1=[NSMutableDictionary dictionary];

//将空字典1对象内容设置与字典2对象相同

[dic1 setDictionary:dic2];

[dic1 removeObjectForKey:@"key1"];  //将字典中key1对应的值删除

NsArray *array=[NSArray arrayWithObjects:@"key1",nil];

[dic2 removeObjectForKeys:array];  //根据指定的数组(key)移除字典1的内容

[dic1 removeAllObjects]  //移除字典所有对象

2)遍历字典

快速枚举

for(id key in dic){

  id obj =[dic objectForKey:key];

  NSLog(@"%@",obj);

}

一般的枚举

NSArray *key = [dic allKeys];

int length = [keys count];

for(int i=0; i < length ;i++){

  id key = [key objectAtIndex : i];

  id key = [dic objectForKey : key];

  NSLog(@"%@",obj);

}

通过枚举类型枚举

NSEnumerator *enumerator = [dic keyEnumerator];

id key = [enumerator nextObject];

while (key){

  id obj = [dic objectForKey : key];

  NSLog(@"%@",obj);

  key = [enumerator nextObject];

}

4.3 集合的处理方法

1.基本概念

  是一组单值对象夫人集合,且NSSet实例中元素是无须的,同一个对象只能保存一个,并且也分可变和不可变集合对象。

2.不可变集合 ——NSSet

1)NSSet的初始化

// 类似与数组的构建,直接创建一个集合

NSSet *set1 =[ [NSSet alloc] initWithObjects:@"one",@"two",nil ];

// 通过数组的构建集合

NSArray *array = [NSArray arrayWithObject:@"1",@"2",@"3",nil ];

NSSet *set2 = [ [NSSet alloc] initWithSet:set2];

//通过已有集合构集合

NSSet *set3 = [ [NSSet alloc] initWithSet:set2];

2)NSSet 常用方法

//集合3中对象个数

int count = [set3 count];

//以数组的相识返回集合3中所有的对象

NSArray *allObject = [set3 allObjects];

//返回集合3中的任意对象

id object = [set3 anyObject];

//集合4中是否包含内容为2的字符对象,有返回yes。

BOOL isContain = [set4 containObject :@"2"];

//集合4中与集合2章是否存在有相同元素的对象,有返回yes。

BOOL isIntersect = [set4 intersectsSet:set2];

// 集合4与集合5的元素是否完全匹配,匹配返回yes。

BOOL isEqual = [set4 isEqualToSet : set5];

//集合4是否是集合5的子集合,是返回yes。

BOOL isSubset = [set4 isSubsetOfSet:set5];

//创建一个新的集合1,集合2有两个对象(a和b)

NSSet *set1 = [NSSet setWIthObjects:@"a",nil];

NSSet *set2 = [set1 setByAddingObject:@"a"];

//通过已有集合7和集合8,创建一个新的集合9

NSSet *set7 = [NSSet setWIthObjects:@"a",nil];

NSSet *set8 = [NSSet setWIthObjects:@"z",nil];

NSSet *set9 = [ set7 setByAddingObjectFromSet:set8];

//通过已有集合10和数组对象,创建一个新的集合11

NSArray *array =[NSArray arrayWithObjects:@"a",@"b",@"c",nil];

NSSet *set10 = [NSSet setWIthObjects:@"z", nil];

NSSet *set11 = [set10 setByAddingObjectFromArray:array];

3.可变集合 ——NSMutableSet

1)常用方法

//创建一个空的集合

NSMutableSet *set1 = [NSMutableSet set];

NSMutableSet *set2 = [NSMutableSet setWithObjects:@"1",@"2",nil];

NSMutableSet *set3 = [NSMutableSet setWithObjects:@"a",@"2",nil];

//集合2“减去”集合3中的元素,集合2最后元素只有一个且为1

[set2 minusSet:set3];

//集合2与集合3中元素的交集,集合2最后元素只有一个且为2

[set2 intersectSet:set3];

//集合2与集合3中的元素的并集,集合2最后元素只有3个,且为,1,2,a

[set2 unionSet:set3];

//将空集合1设置为集合3中的内容

[set1 setSet:set3];

//根据数组内容删除集合中的对象

[set2 addObjectsFromArray:array];

[set2 removeObject:@"1"];

[set2 removeAllObjects];

5.数字对象的常用处理方法

  5.1为了发送消息,则需要将基本数据类型当作对象来处理。把基本类型放在集合中(在COCOA中集合只能存放对象,无法存放基本数据类型),因此需要将基本数据类型转化为数字对象。OC中提供了数字对象“NSNumber”可以将基本数据类型“包装”成对象,这样就可以将基本数据类型来处理了。

1、数字对象的初始化

//类方法创建数字对象

int number = 10;

NsNumber *intNumber = [NSNumber numberWithInt :number];

BOOL isBoool = YES;

NSNumber *boolNumber = [NSNumber numberWithInt:isBool];

//实例方法创建数字对象

float pi = 3.14;

NSNumber *piNumber = [ [NSNumber alloc] initWithFloat :pi ];

char character='a';

NSNumber *cNumber = [ [NSNumber alloc] initWIthChar:character];

2、数字对象的转换

//还原成基本数据类型

int month = [intNumber intValue];

BOOL isOpen = [boolNumber boolValue];

float length = [piNumber floatValue];

char firstName = [cNumber charValue];

5.2NSValue和NSNull

1、NSValue

  NSValue可以包装任意值(如结构体、指针等)

  NSSize size = {100,200};

  //@encode 将value值拷贝到newsize中(还原)

  NSValue *value = [NSValue value:&size withObjectCType:@encode(NSSIze)];

  NSSize newSize;

  //将value值拷贝到newsize中(还原)

  [value getValue:&newSize];

  NSLog(@"new size : %@",NSStringFromSize(newSize));

2、NSNull

  不能在集合中存储nil值是因为字典和数组中nil都有特殊的含义,但有时又确实需要存储一个表示“什么都没”的值。用NSNull代替,表示什么都不是,什么都没有。

6、 集合、数字对象的新写法

1、数组的新写法

NSArray *array = @[@"123",@456,@678];

id element1 = array[1];

NSLog(@"element 1:%@",element1);

NSMutableArray *mutableArray = [@[@"123",@456] mutableCopy];

id element2 = mutableArray[0];

NSLog(@"element 2: %@",element2);

2、字典的写法

NSDictionary *dic = @{@"key1":@0 , @"key2":@1 } ;

id value1 = dic [@"key1"];

NSLog(@"value 1 : %@",value);

NSMutableDictionary *mutableDic = [@{@"key3" : @1 , @"key4" : @2 } mutableCopy] ;

id value2=mutableDic[@"key3"] ;

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

3、嵌套写法

NSArray *newArray = @[@123,@456,@789];

NSArray *nestArray = @[newArray,@999,@[@11,@22] ] ;

NSDictionary *newDic = @{@"key10" : @[@11,@22] , @"key11" : nestArray} ;

NSMutableDictionary *mutableNewDIc = [@{@"key12" : newDic , @"key13" : @123 } mutableCopy] ;

4、新写法的内存管理

  新语法创建的数组、集合,将被直接添加到自动释放池中。不需要用户手动释放,如需要长时间保留,可以用retain或copy,延长对象的生命周期。

1)初始化方法

NSNumber *intNum = @123;

NSNumber *floatNum = @3.14159f;

NSNumber *charNum = @'z';

NSNumber *boolNum = @YES;

NSNumber *number = @(12+num);

7、日期类的常用处理方法

1、时间戳的概念

  某一日期到1970年的秒数大小,称为该日期的时间戳。

2、NSDate的基本概念

  在Foundation框架中,提供了NSDate类,是cocoa提供给用处日期的类。提供日期的创建、比较、计算时间间隔等功能,是是常用的类库之一。

3、常用处理方法

//获取时间戳

NSTimeInterval time2001 = [date timeIntervalSinceReferenceDate] ;

NSLog(@"time 2001: %f",time2001 ) ;//GMT

NSTimeInterval time1970 = [date timeIntervalSince1970];

NSLog(@"time 1970: %f",time1970 ) ;//GMT

NSTimeInterval timeNow = [date timeIntervalSinceNow];

NSLog(@"time 2001: %f",time2001 ) ;//GMT

//昨天、今天、明天

NSTimeInterval time = 24*60*60;

NSDate *_yesterday = [ [NSDate alloc] initWithTimeIntervalSinceNow: -time] ;

NSDate *_today = [ [NSDate alloc] initWithTimeIntervalSinceNow:0] ;

NSDate *_tomorrow = [ [NSDate alloc] initWithTimeIntervalSinceNow:time] ;

1、常用处理方法

//在未来的一个时间,在远古的一个时间

NSDate *feature = [NSDate distantFuture] ;

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

NSDate *ancient = [NSDate distantPast] ;

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

//日期的比较

if(![ _yesterday isEqualToDate: _tomorrow]){

  NSLog(@"不同的一天");

}

//返回一个早的时间

NSDate *earlierDate = [feature earlierDate : ancient ] ;

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

//比较时间

NSComparsionResult result = [ _tomorrow compare:_today] ;

//时间戳转换成字符串

NSString *timeString = @"1234568790";

NSDate *convertDate = [NSDate dateWithTimeIntervalSince1970 : [timeString doubleValue] ];

NSLog(@"convertDate %@", convertDate);

/*NSDateFormatter格式化日期*/

NSDateFormatter *formatter = [ [ NSDateFormatter alloc] init];

[formatter setDateFormat:@"yyyy-MM-dd HHmm +0800"];

NSString *formatterDate = [formatter stringFromDate : [NSDate date] ];

NSLog(@"formatter Date : %@",formatterDate);

oc语言的Foundation框架(学习笔记2)的更多相关文章

  1. oc语言的Foundation框架(学习笔记1)

    Foundation框架 1.Foundation框架介绍 框架是由许多类.方法.函数以及文档按照一定的规则组合的起来的集合. cocoa程序编写主要用到2个框架Foundation和Applicat ...

  2. 【iOS】Foundation框架 学习笔记

    1.数组 OC数组不能存放nil值OC数组只能存放OC对象.不能存放非OC对象类型,比如int.struct.enum等 ====================================== ...

  3. Cocoa Foundation框架学习笔记 - NSCalendar

    + (void)beginTest { /* FOUNDATION_EXPORT NSString * const NSGregorianCalendar; //公历(常用) FOUNDATION_E ...

  4. JavaSE中Collection集合框架学习笔记(3)——遍历对象的Iterator和收集对象后的排序

    前言:暑期应该开始了,因为小区对面的小学这两天早上都没有像以往那样一到七八点钟就人声喧闹.车水马龙. 前两篇文章介绍了Collection框架的主要接口和常用类,例如List.Set.Queue,和A ...

  5. SSM框架学习笔记_第1章_SpringIOC概述

    第1章 SpringIOC概述 Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架. 1.1 控制反转IOC IOC(inversion of controller)是一种概念 ...

  6. phalcon(费尔康)框架学习笔记

    phalcon(费尔康)框架学习笔记 http://www.qixing318.com/article/phalcon-framework-to-study-notes.html 目录结构   pha ...

  7. Yii框架学习笔记(二)将html前端模板整合到框架中

    选择Yii 2.0版本框架的7个理由 http://blog.chedushi.com/archives/8988 刚接触Yii谈一下对Yii框架的看法和感受 http://bbs.csdn.net/ ...

  8. JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue

    前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的 ...

  9. JavaSE中Map框架学习笔记

    前言:最近几天都在生病,退烧之后身体虚弱.头疼.在床上躺了几天,什么事情都干不了.接下来这段时间,要好好加快进度才好. 前面用了三篇文章的篇幅学习了Collection框架的相关内容,而Map框架相对 ...

随机推荐

  1. STL 小白学习(7) list

    #include <iostream> using namespace std; #include <list> void printList(list<int>& ...

  2. js dictionary

    转载的 1.dictionary例子 <script type="text/javascript" language="javascript"> v ...

  3. day42-python消息队列一

    消息队列”是在消息的传输过程中保存消息的容器.消息队列最经典的用法就是消费者和生成者之间通过消息管道来传递消息,消费者和生成者是不通的进程.生产者往管道中写消息,消费者从管道中读消息.操作系统提供了很 ...

  4. 关于Servlet的一些归纳(2)

    1.web项目结构 根路径: 文件夹 文件 WEB-INF: lib(存放一些jar文件) classes(存放class文件) web.xml 2.GenericServlet类 实现了Servle ...

  5. es6 - 一共有 6 种声明变量的方法(var, function, let, const, class, import)

    var命令和function命令声明的全局变量,依旧是顶层对象的属性:let命令.const命令.class命令声明的全局变量,不属于顶层对象的属性.也就是说,从 ES6 开始,全局变量将逐步与顶层对 ...

  6. Failed to start bean 'stompBrokerRelayMessageHandler'; nested exception is java.lang.NoClassDefFoundError: reactor/io/codec/Codec

    最新版本的Spring需要reactor 2.0,看看你的POM有一个明确的1.1.6依赖. 解决: <dependency> <groupId>org.projectreac ...

  7. 微信小程序-解决下拉刷新报错

    关于“enablePullDownRefresh”: “true” 一.使用方式 在 Page 中定义 onPullDownRefresh 处理函数,监听该页面用户下拉刷新事件.需要在 config ...

  8. Android : Camera之CHI API

    一.CAM CHI API功能介绍: CHI API建立在Google HAL3的灵活性基础之上,目的是将Camera2/HAL3接口分离出来用于使用相机功能,它是一个灵活的图像处理驱动程序(摄像头硬 ...

  9. Spring Cloud分布式微服务云架构

    分布式.微服务.云架构 JAVA语言开发.跨平台.高性能.高可用.安全.服务化.模块化.組件化.驱动式开发模式 commonservice eurekaNetflix 云端服务发现,一个基于 REST ...

  10. python模块和包(模块、包、发布模块)

    模块和包 目标 模块 包 发布模块 01. 模块 1.1 模块的概念 模块是 Python 程序架构的一个核心概念 每一个以扩展名 py 结尾的 Python 源代码文件都是一个 模块 模块名 同样也 ...