Foundation框架下的基本类

来源:互联网 发布:阿里云备案幕布电子版 编辑:程序博客网 时间:2024/05/17 18:15

Foundation框架下的基本类

NSValue/NSNumber

    功能将OC和C语言当中的基本数据类型转换成实例对象,即将值类型转换成引用类型
OC和C中的基本数据类型        int a = 5;        float b = 4.5;        double c = 34.5545;        char d = 'c';//        CGPoint point = {3,5};//        CGSize size = {30,47};//        CGRect rect = {point,size};        CGPoint point = CGPointMake(3, 5);        CGSize size = CGSizeMake(40, 60);        CGRect rect = CGRectMake(3, 5, 40, 60);        NSRange range = NSMakeRange(3, 7);        NSEdgeInsets edgeInsets = NSEdgeInsetsMake(10, 10, 10, 10);

NSValue 为 NSNumber 的父类.
其中NSValue类可以将CGPointCGSizeCGRectNSRangeNSEdgeInsets转换成对象

 NSValue *pointValue = [NSValue valueWithPoint:point];        NSValue *sizeValue = [NSValue valueWithSize:size];        NSValue *rectValue = [NSValue valueWithRect:rect];        NSValue *rangeValue = [NSValue valueWithRange:range];        NSValue *edgeInsetsValue = [NSValue valueWithEdgeInsets:edgeInsets];

其中NSNumber类可以将intfloatdoublecharBOOL等C中基本数据类型转换成对象

NSNumber *intNumber = [NSNumber numberWithInt:1];        NSNumber *integerNumber = [NSNumber numberWithInteger:12];        NSNumber *floatNumber = [NSNumber numberWithFloat:12.3];        NSNumber *doubleNumber = [NSNumber numberWithDouble:12.455];        NSNumber *charNumber = [NSNumber numberWithChar:'a'];        NSNumber *boolNumber = [NSNumber numberWithBool:YES];

我们将C和OC中的基本数据类型(值类型)转换成对象(引用类型)的过程,叫做封装。相对应的,也有一个将对象转变成基本数据类型,此过程叫做拆包。

//拆包CGPoint point1 = [pointValue pointValue];        CGSize size1 = [sizeValue sizeValue];        CGRect rect1 = [rectValue rectValue];        NSRange range1 = [rangeValue rangeValue];        NSEdgeInsets edgeInsets1 = [edgeInsetsValue edgeInsetsValue];        int a1 = [intNumber intValue];        NSInteger a2 = [integerNumber integerValue];        float a3 = [floatNumber floatValue];        double a4 = [doubleNumber doubleValue];        char a5 = [charNumber charValue];        BOOL a6 = [boolNumber boolValue]

NSString / NSMutableString

OC中的字符串具有强大的功能,即封装性极强,我们只需要找到对应API,就可以对字符串做相应操作。OC中字符串分为 `不可变字符串` 和 `可变字符串`,其中`可变字符串`是`不可变字符串`的子类.在iOS开发中,字符串通常用作显示文本,即作为`UILabel`、`UITextFeild`等一些`UIKit`框架下控件的显示文本
NSString 不可变字符串
初始化字符串

1.快速初始化

NSString *string1 = @"bokanwisdom";

2.格式化的方式初始化字符串

NSString *string4 = [NSString stringWithFormat:@"%d%f%@",3,3.14,@"dajiahao"];

note:对于用格式化方式来构造字符串实例来讲,其作用并不是仅仅来构造一个字符串对象,它还可以用来做字符串拼接

3.从本地文件中读取字符串

NSString *string7 = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];

NSString *string8 = [NSString stringWithContentsOfFile:path usedEncoding:&encoding error:&error];

4.从网络中读取一个字符串

NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];NSString *string9 = [NSString stringWithContentsOfURL:url encoding:4 error:&error];
字符串的操作

1.字符串长度

NSUInteger length = string10.length;

2.字符串的截取

       NSString *subStr1 = [string10 substringToIndex:8];       NSString *subStr2 = [string10 substringFromIndex:8];        NSString *subStr3 = [string10 substringWithRange:NSMakeRange(8, length-8)];

3.字符串比较

==:表示两个字符串内容和指针都相同

 if (subStr2 == subStr3) {            //内容和指针都相等时,才成立            NSLog(@"subStr2和subStr3相等");        }else{            NSLog(@"subStr2和subStr3不相等");        }

[subStr2 isEqualToString:subStr3]:表示两个字符串内容是否相同

  if ([subStr2 isEqualToString:subStr3]) {            NSLog(@"subStr2和subStr3内容相同");        }else{            NSLog(@"subStr2和subStr3内容不相同");        }
  1. 根据字符串拿到对应的range

NSRange range = [string10 rangeOfString:@"人家"];

5.判断字符串中是否有xx前缀或xx后缀

        NSString *string11 = @"www.baidu.com";        if ([string11 hasPrefix:@"http://"]) {            NSLog(@"含有此前缀");        }else{            NSLog(@"不含有此前缀");        }        NSString *string12 = @"sdfdf.jpg";        if([string12 hasSuffix:@".jpg"]||[string12 hasSuffix:@".png"]){            NSLog(@"含有此后缀");        }

6.字符串拼接

 NSString *string13 = [@"http://" stringByAppendingString:string11];        NSLog(@"string13 = %@",string13);        NSString *domainStr = @"http://baidu.com";        NSString *xxx = @"login";        //http://baidu.com/login       NSString *string14 = [NSString stringWithFormat:@"%@/%@",domainStr,xxx];        NSLog(@"string14 = %@",string14);        NSString *string15 = [domainStr stringByAppendingPathComponent:xxx];        NSLog(@"string15 = %@",string15);        //http://b.hiphotos.baidu.com/image/pic/item/e4dde71190ef76c666af095f9e16fdfaaf516741.jpg        NSString *imgPath = @"http://b.hiphotos.baidu.com/image/pic/item/e4dde71190ef76c666af095f9e16fdfaaf516741.jpg";        imgPath = [imgPath lastPathComponent];        NSLog(@"imgPath = %@",imgPath);        path = [path lastPathComponent];        NSLog(@"path = %@",path);        NSString *theImageName = @"lishucheng";       theImageName = [theImageName stringByAppendingPathExtension:@"png"];        NSLog(@"theImageName = %@",theImageName);
NSMutableString 可变字符串

可变字符串NSMutableString是继承于不可变字符串NSString。即意味着前面所讲关于不可变字符串的操作都适用于可变字符串。

1.初始化方法

        NSMutableString *mString0 = [NSMutableString stringWithString:@"nihao"];    NSMutableString *mString1 = [NSMutableString stringWithFormat:@"hello"];    NSMutableString *mString2 = [NSMutableString stringWithContentsOfFile:@"" encoding:4 error:nil];    NSMutableString *mString3 = [NSMutableString stringWithContentsOfURL:[NSURL URLWithString:@""] encoding:4 error:nil];    //可变字符串独特初始化方式,初始化一个空间为100的空的可变字符串    NSMutableString *mString4 = [[NSMutableString alloc] initWithCapacity:100];

2.操作(不可变字符串的API,可变字符串都具备)

1.增加 //在指定位置去插入一段字符串    [targetString insertString:@",你是sb么,有点意识,OK?" atIndex:targetString.length];    NSLog(@"targetString = %@",targetString);    //在字符串的末尾添加一个字符串    [targetString appendString:@"不想玩,滚!"];    NSLog(@"targetString = %@",targetString);    //在字符串的末尾添加多个字符串    [targetString appendFormat:@"%@%@",@"fuck!",@"your mom boom boom boom"];2.替换range = [targetString rangeOfString:@"sb"];    [targetString replaceCharactersInRange:range withString:@"**"];3.删除 [targetString deleteCharactersInRange:NSMakeRange(0, 3)];

NSArray / NSMutableArray

在OC中,我们用 NSArray 类和 NSMutableArray类来表示数组,其中NSArray类是 NSMutableArray类的父类。在OC中,我们的数组是有序的 对象 的集合,即我们的数组只能存储 对象。 在OC中我们的数组中元素类型不能是 intfloatCGPoint等类型。

NSArray(不可变数组)

1.初始化方法

//创建一个空的不可变的数组    NSArray *array1 = [[NSArray alloc] init];    NSArray *array2 = [NSArray array];    //创建一个里面只有一个元素的不可变数组    NSArray *array3 = [NSArray arrayWithObject:@"zhoudu"];    //创建一个里面有多个元素的不可变数组    NSArray *array4 = [NSArray arrayWithObjects:@"zhoudu",@"xingzhenyu",@"panzhijing",@"gugenggeng", nil];    //新语法    NSArray *array5 = @[@"zhoudu"];    NSArray *array6 = @[@"zhoudu",@"xingzhenyu",@"panzhijing",@"gugenggeng"];    //从另外一个数组中创建一个数组    NSArray *array7 = [NSArray arrayWithArray:array2];    //从本地文件中读取数组    NSArray *array8 = [NSArray arrayWithContentsOfFile:@""];    //从网络文件中读取一个数组    NSArray *array9 = [NSArray arrayWithContentsOfURL:[NSURL URLWithString:@""]];

2.数组元素个数

 NSUInteger count = array6.count;

3.访问数组元素

 NSString *str = [array6 objectAtIndex:0]; //新语法访问数组中的元素    NSString *str2 = array6[1];     //通过数组的元素找下标   NSUInteger index = [array6 indexOfObject:@"zhoudu"];

4.判断数组中是否存在某个元素

  BOOL flag = [array6 containsObject:@"zhoudu"];

5.向不可变数组中增加一个元素或者,生成一个新的数组

    NSArray *newArray1 = [array6 arrayByAddingObject:@"方剑青"];    NSArray *newArray2 = [array6 arrayByAddingObjectsFromArray:array6];
NSMutableArray(可变数组)

NSMutableArrayNSArray的子类,即上述使用API对于可变数组来讲都适用

1.初始化方法

NSMutableArray *mArray1 = [NSMutableArray array];    NSMutableArray *mArray2 = [NSMutableArray arrayWithObject:@"1"];    NSMutableArray *mArray3 = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4", nil];    NSMutableArray *mArray4 = [NSMutableArray arrayWithArray:mArray2];    //可变数组独有的初始化方法    NSMutableArray *mArray5 = [NSMutableArray arrayWithCapacity:10];    NSMutableArray *mArray6 = [NSMutableArray arrayWithContentsOfFile:@""];    NSMutableArray *mArray7 = [NSMutableArray arrayWithContentsOfURL:[NSURL URLWithString:@""]];

2.操作

 //增加    //在数组的末尾增加一个元素    [mArray3 addObject:@"5"];    //在数组的指定位置增加一个元素    [mArray3 insertObject:@"vincent" atIndex:3];    //替换,将数组指定位置上的元素替换成用户想要元素    [mArray3 replaceObjectAtIndex:2 withObject:@"sb"];    //交换,将数组指定位置上的两个元素交换位置    [mArray3 exchangeObjectAtIndex:1 withObjectAtIndex:4];    //删除    //删除指定元素    [mArray3 removeObject:@"1"];    //删除指定位置上的元素    [mArray3 removeObjectAtIndex:2];    //删除数组中最后一个元素    [mArray3 removeLastObject];    for (NSString *ele in mArray3) {        NSLog(@"ele = %@",ele);    }    //删除数组中所有元素    [mArray3 removeAllObjects];

3.数组的遍历

//快速枚举    NSMutableArray *marray = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil];    for (NSString *element in marray) {        NSLog(@"element = %@",element);    }//使用系统提供的枚举类 NSEnumerator    NSEnumerator *enumerator = [marray objectEnumerator];    NSString *ele;    while (ele = [enumerator nextObject]) {        NSLog(@"ele = %@",ele);    }

note:当遍历可变数组时,不可修改可变数组

NSDictionary /NSMutableDictionary

1.概念:字典是关键字key及其定义的值value所构成的集合,即它是由key-value组成的键值队的集合。通常来讲,key一般是NSString类型,value是OC中任意的对象。对于字典来讲,我们就是通过key来访问value

2.为什么在有了数组后,还需要有字典呢?在有大量的数据或频繁的查找信息,使用字典效率更高。因为字典是采用键查询的优化存储方式。

3.在OC中我们使用NSDictionaryNSMutableDictionary来表示字典,其中NSMutableDictionaryNSDictionary子类。

4.字典初始化

 //创建一个空的字典    NSDictionary *dictionary1 = [[NSDictionary alloc] init];    NSDictionary *dictionary2 = [NSDictionary dictionary];    //创建一个键值队的字典    NSDictionary *dictionary3 = [NSDictionary dictionaryWithObject:@"vincent" forKey:@"name"];    //创建多个键值队的字典    NSDictionary *dictionary4 = [NSDictionary dictionaryWithObjectsAndKeys:@"vincent",@"name",@24,@"age",@"广州",@"address", nil];    //value在前,key在后,value和key要成双出现    NSLog(@"dictionary4 = %@",dictionary4);    //根据一个字典创建一个字典    NSDictionary *dictionary5 = [NSDictionary dictionaryWithDictionary:dictionary4];    //新语法创建字典    NSDictionary *dictionary6 = @{};    NSDictionary *dictionary7 = @{@"name":@"vincent"};    NSDictionary *dictionary8 = @{@"name":@"vincent",@"age":@24,@"address":@"广州"};    NSDictionary *dictionary11 = [NSMutableDictionary dictionaryWithContentsOfFile:@""];    NSDictionary *dictionary12 = [NSMutableDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:

5.键值对数量

  NSUInteger count = dictionary4.count;

6.如何访问字典中元素

    //通过key来访问字典中对应的值    NSString *name = [dictionary4 objectForKey:@"name"];    //新语法    NSString *newName = dictionary4[@"name"];    //如何遍历字典中的所有值?    //表示字典中所有的key    NSArray *keysArray = dictionary4.allKeys;    //表示字典中所有的value    NSArray *valuesArray = dictionary4.allValues;    for (NSString *key in keysArray) {        NSLog(@"%@ : %@",key,dictionary4[key]);    }   enumerator = dictionary4.keyEnumerator;    NSString *key;    while (key = [enumerator nextObject]) {       NSLog(@"%@ : %@",key,dictionary4[key]);    }

7.在字典中不能够存在相同key,能够存在相同的value

8.在字典中键值对是无序的

NSMutableDictionary(可变字典)

1.初始化方法

        //1.初始化方法    NSMutableDictionary *mdictionary1 = [NSMutableDictionary dictionary];    NSMutableDictionary *mdictionary2 = [NSMutableDictionary dictionaryWithObject:@"name" forKey:@"vincent"];    NSMutableDictionary *mdictianary3 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"vincent",@"name",@24,@"age",@"广州",@"address", nil];    //没有新语法    NSMutableDictionary *mdictionary4 = [NSMutableDictionary dictionaryWithDictionary:dictionary8];    //自己独有的初始化方法    NSMutableDictionary *mdictionary5 = [NSMutableDictionary dictionaryWithCapacity:10];    NSMutableDictionary *mdictionary6 = [NSMutableDictionary dictionaryWithContentsOfFile:@""];    NSMutableDictionary *mdictionary7 = [NSMutableDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@""]];

2.操作

 //增    [mdictionary5 setValue:@"vincent" forKey:@"name"];    [mdictionary5 setValue:@"guangzhou" forKey:@"address"];    NSLog(@"mdictionary5 = %@",mdictionary5);    //改    [mdictionary5 setValue:@"jerry" forKey:@"name"];    NSLog(@"mdictionary5 = %@",mdictionary5);    //新语法    mdictionary5[@"name"] = @"zhoudu";    NSLog(@"mdictionary5 = %@",mdictionary5);    //删    [mdictionary5 removeObjectForKey:@"name"];    [mdictionary5 removeObjectsForKeys:@[]];    [mdictionary5 removeAllObjects];

NSData/NSMutableData

1.计算机中文件分为哪几种?

文本文件和二进制文件,其中我们图片、歌曲、电影等就是二进制文件,像 `.txt` 的文件就是文本文件。

2.客户端与服务器端,或者客户端与客户端数据交流的格式为二进制(字节流)。那么对于传输给客户端数据,在我们OC中用什么类来存储?即为 NSData类。对NSData类来说,由其实例化的对象,此对象中包含大量的字节,这些字节就是我们客户端想要信息。

3.创建NSData

        //创建一个空的data    NSData *data = [NSData data];   NSString *string = @"你好吗?";    //将字符串转换成NSData    //将字符串转换成C语言中字符串    const char *str = [string UTF8String];    //将C语言的字符串转换成data    NSData *data1 = [NSData dataWithBytes:str length:strlen(str)];    NSLog(@"data1 = %@",data1);    //直接将OC中字符串转换成data   NSData *data2 = [string dataUsingEncoding:4];    NSLog(@"data2 = %@",data2);    //将本地文件中数据的转换成data    NSData *data3 = [NSData dataWithContentsOfFile:@"/Users/vincent/Desktop/1.jpg"];    NSLog(@"data3 = %@",data3);    //    NSData *data4 = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://s0.hao123img.com/res/img/logo/logonew1.png"]];    NSLog(@"data4 = %@",data4);   BOOL flag = [data4 writeToFile:@"/Users/vincent/Desktop/2.png" atomically:YES];    if (flag) {        NSLog(@"下载成功!");    }

4.一个data的字节长度

 NSUInteger length = data4.length;

5.对于NSMutableData,其为NSData的子类

增加[mdata appendData:data1];

NSDate

在OC中,Foundation框架为我们提供了强大时间操作类NSDate,该类封装了各种处理时间和日期的API

1.构造一个 NSDate

 //获取系统当前时间    NSDate *date1 = [NSDate date];    NSLog(@"date1 = %@",date1);    //当前系统时间+100秒    NSDate *date2 = [NSDate dateWithTimeIntervalSinceNow:100];    NSLog(@"date2 = %@",date2);    //    NSDate *date3 = [NSDate dateWithTimeIntervalSince1970:100];    NSLog(@"date3 = %@",date3);    //    NSDate *date4 = [NSDate dateWithTimeInterval:100 sinceDate:[NSDate date]];     NSLog(@"date4 = %@",date4);

2.关于 时间戳

 //将一个日期转换成时间戳,此时间戳是以1970年为标准    NSTimeInterval timeInterval1970 = [[NSDate date] timeIntervalSince1970];    NSLog(@"timeInterval1970 = %f",timeInterval1970);    NSTimeInterval timeIntervalNow = [[NSDate date] timeIntervalSinceNow];    NSLog(@"timeIntervalNow = %f",timeIntervalNow);

3.将NSDate转换成NSString

 NSDateFormatter *dateFormatter = [NSDateFormatter new];    //设置时区(默认时区)    dateFormatter.timeZone = [NSTimeZone systemTimeZone];    //设置时间输出格式    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss ms"];   NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];    NSLog(@"dateString = %@",dateString);

4.将 NSString 转换成 NSDate

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];   NSDate *date = [dateFormatter dateFromString:@"2015-07-31 15:41:42"];    NSLog(@"date = %@",date);
0 0