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

紧接上文……

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);

 

 

 

 

 

 

 

 

 

posted on 2017-07-19 15:31  Lexyguo  阅读(123)  评论(0编辑  收藏  举报

导航