zoukankan      html  css  js  c++  java
  • 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);

     

  • 相关阅读:
    Xpath注入攻击及其防御技术研究
    警言201003
    linux命令0423
    tomcat 和myeclipse 怎么不和谐啊
    JAVA环境变量
    笑话201003
    linux 下安装qt
    Myeclipse,tomcat
    惜福
    Windows 下用reg 文件将exe 写入启动项
  • 原文地址:https://www.cnblogs.com/lexyg/p/7124075.html
Copyright © 2011-2022 走看看