Foundation框架中一些类的使用

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

提示: 这篇博文主要介绍了Foundation框架中一些类的使用方法,都是以代码方式展示的,可能会比较乱,但都是些常用的方法,这些方法常用自然就会记住所以不用纠结,注意主要记方法的第一个单词,单词不认识的话可以记前三个字母,再配合提示查找

------------------------------------------------------------------------------------------------------------------

NSURL简介

什么是URL?

URL的全称是Uniform Resource Locator(统一资源定位符) URL是互联网上标准资源的地址 互联网上的每个资源都有一个唯一的URL,它包含的信息指出资源的位置 根据一个URL就能找到唯一的一个资源

URL的格式?

基本URL包含协议、主机域名(服务器名称\ip地址)、路径

可以简单认为: URL == 协议头://主机域名/路径

例如:http://www.baidu.com/123.jpg

常见的URL协议头(URL类型)

http\https :超文本传输协议资源, 网络资源

在URL前加https://前缀表明是用SSL加密的。 你的电脑与服务器之间收发的信息传输将更 加安全。

Web服务器启用SSL需要获得一个服务器证书并将该证书与要使用SSL的服务器绑定。 http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。http 的连接很简单,是无状态的

https协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全

ftp :文件传输协议

//NSURL OC提供了一个URL处理的一个类//http//https 加密//ftp:////file://本地文件//NSURL 写入文件//1)通过 URLWithString 构建一个NSURL//URLWithString 可以构建本地路径的URL//可以构建路径,调用手机系统的程序//打电话NSURL *url = [NSURL URLWithString:@"tel://10086"];//发短信NSURL *url = [NSURL URLWithString:@"sms://10086"];//保存文件到本地NSURL *url = [NSURL URLWithString:@"file://地址"];//将字符串写入本地NSString *str =@"xxxxx";

BOOL isOk= [str writeToURL:<#(NSURL *)#> atomically:<#(BOOL)#> encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>];//第一个参数文件路径 第二个参数是否利用原子性 第三个编码标准NSUTF8StringEncoding 最后一个错误信息//一般写入文件都要进行判断是否写入成功NSError *error;if(isOk) {

NSLog(@"写入成功");

}else{

NSLog(@"%@",&error);

}

NSURL的一些用法

NSString

//快速创建字符串NSString *str =@"xxxx";//字符串写入文本BOOL isOk = [str writeToFile:@"/User/Apple/Desktop/1.tex"atomically:YES encoding:NSUTF8StringEncoding error:nil];

NSString*str1 =@"abc";//a 97NSString *str2 =@"abc";//A 65//取出每个字符的ASCII码值 ,比较ASCII码值大小//compare方法比较大小//compare 默认的区分大小写的//compare 这个函数,不能增加条件//NSComparisonResult result = [str1 compare:str2];//比较的时候,不区分大小写,参考字符的个数NSComparisonResult result = [str1 compare:str2 options:NSCaseInsensitiveSearch|NSNumericSearch];//switch(result) {caseNSOrderedAscending:

NSLog(@"str1 < str2 升序");

break;caseNSOrderedDescending:

NSLog(@"str1 > str2 降序");

break;caseNSOrderedSame:

NSLog(@"str1 == str2");

break;default:

break;

}//地址的比较//"==" 不能够判断字符串是否相等的//判断字符串内容真正是否相等,使用是//isEqualToString://注意:他是区分大小写的if([str1 isEqualToString:str3]) {

NSLog(@"相等");

}else{

NSLog(@"不相等");

}/*检测字符串的前缀和后缀*/NSString*url =@"https://www.baidu.com";//如何检测这个字符串是否是一个网址//http://https:////检测一个字符串的前缀是否以 http://开头 或者 https://开头//[str hasprefix:@"要检测的内容"];if([url hasPRefix:@"http://"]||[url hasPrefix:@"https://"]){

NSLog(@"是一个网址");

}else{

NSLog(@"这不是一个网址");

}//检测字符串的后缀//xxxx.jpg 判断 字符串的后缀是否是".jpg"//xxxx.png//xxxx.jpeg//xxxx.gifNSString *imgName =@"xxxxx.doc";//[str hasSuffix:@"带检测的后缀"]if([imgName hasSuffix:@".jpg"]||[imgName hasSuffix:@".png"]||[imgName hasSuffix:@".jpeg"]||[imgName hasSuffix:@".gif"]){

NSLog(@"是一个图片");

}else{

NSLog(@"这不是一个图片");

}//字符串的查找//查找某个字符串在另外一个字符串中首次出现的位置//0123456789//1 @"asdaiosffsdafiosasdfsffitcastasdfasd"//2 @"ios"//4 3//1 rangOfString 2NSString *str1 =@"asdaiosffsdafiosasdfsffitcastasdfasd";

NSString*str2 =@"cjk";//字符串查找//查找2 在 1中首次出现的位置//如果查找到了,返回2在1中的位置和长度//如果查找不到,返回的信息://location 特别大的数(NSNotFound) 最大的long类型的数//length 0//range 结构体变量 NSRange 结构别名NSRange range =[str1 rangeOfString:str2];//判断是否查找到了if(range.location!=NSNotFound){//range.location 表示字符串首次出现的位置//range.length 字符串出现的长度(实质上就是子字符串的长度)NSLog(@"%lu,%lu",range.location,range.length);

}else{

NSLog(@"在%@中没有找到这个字符串%@",str1,str2);

}//字符串的截取NSString *str =@"http://www.baidu.com";//1) 从xx位置开始,到最后结束(包含xx这个位置的字符)NSString *str1 = [str substringFromIndex:5];

NSLog(@"str1 = %@",str1);//2) 从开始位置,到xx位置结束(不包含xx这个位置)NSString *str2 = [str substringToIndex:5];

NSLog(@"str2 = %@",str2);//3) 截取一个范围 rangeNSRange r1 = {3,4};

NSString*str3 =[str substringWithRange:r1];

NSLog(@"str3 = %@",str3);//字符串的替换//@"asdfsdafasdfdasdfsa" ----> a 替换成 "*"//@" asdfasfd asdfsadf asdf asdfas asdf asdf asdfa"NSString*str =@"asdfsdafasdfdasdfsa";//str stringByReplacingOccurrencesOfString:@"源字符串中的内容" withString:@"要替换成新的内容"//把a替换成 *NSString *newStr = [str stringByReplacingOccurrencesOfString:@"a"withString:@"*"];

NSLog(@"newStr = %@",newStr);//把空格给去掉str =@"asdfasfd asdfsadf asdf asdfas asdf asdf asdfa";

newStr= [str stringByReplacingOccurrencesOfString:@""withString:@""];

NSLog(@"newStr = %@",newStr);//字符串转各种数值NSString *str =@"11";inta =[str intValue];

NSString*str1 =@"12.21";doubleb =[str1 doubleValue];

NSString*str2 =@"12.12f";floatc =[str2 floatValue];//OC的字符串和 C的字符串互相转换问题//char* NSString//1) C---->OC对象char*s ="zhangsanfeng";

printf("%s\n",s);//思路:创建一个OC的字符串对象,用C语言的字符串创建NSString *str =[NSString stringWithUTF8String:s];

NSLog(@"str = %@",str);//2) OC对象 --> C的字符串NSString *str2 =@"zbz";//把str2 转 C的字符串constchar*s1 =[str2 UTF8String];

printf("s1 = %s\n",s1);

NSString的一些用法

NSRange

//NSRange的定义typedefstruct_NSRange {

NSUInteger location;//位置NSUInteger length;//从该位置算起的长度} NSRange;

NSMutableString

//可变的字符串NSMutableString *str2 = [NSMutableString stringWithFormat:@"Jack"];//在Jack后面加上&Rose[str2 appendString:@"&Rose"];

NSMutableString*str = [NSMutableStringstring];//1) appendFormat 格式化的添加字符串[str appendFormat:@"http://www.baidu.com/%d",100];//strhttp://www.baidu.com/100NSLog(@"%@",str);//2) 删除字符串一部分内容[str deleteCharactersInRange:NSMakeRange(3,4)];

NSLog(@"%@",str);//3) 插入一个字符串[str insertString:@"p://"atIndex:3];

NSLog(@"%@",str);//4) 替换字符串的一部分内容[str replaceCharactersInRange:NSMakeRange(11,5) withString:@"xxxxx"];

NSLog(@"%@",str);//注意不能这么写NSMutableString *str =@"abc";

NSMutableString的一些用法

NSArray

//NSArray特点://一旦创建成功,内容不可改变//只能存放OC对象//1)创建一个空数组NSArray *arr1 =[NSArray array];//2)创建数组,只有一个元素NSArray *arr2 = [NSArray arrayWithObject:@"1"];//3)创建数组,有多个元素//nil 表示数组赋值结束//常见写法NSArray *arr3 = [NSArray arrayWithObjects:@"one",@"two",@1, nil];

NSLog(@"arr3 = %@",arr3);//4)调用对象方法,创建数组//nil Nil NULL NSNULLNSArray *arr4 = [[NSArray alloc] initWithObjects:@"three",[NSNullnull],@"four", nil];

NSLog(@"arr4 = %@",arr4);//5)用一个数组可以创建另外一个数组NSArray *arr5 =[NSArray arrayWithArray:arr3];

NSLog(@"arr5 = %@",arr5);//用简化的方式,来定义和访问数组元素//1)用简化的方式,定义数组//格式: @[ 数组元素 ]NSArray *arr = @[@"1",@"one",@"3",@4,@"ONE"];//数组的常见的方法NSArray *arr3 = [NSArray arrayWithObjects:@"one",@"two",@1,@"three", nil];

NSLog(@"arr3 = %@",arr3);//1)获取数组的长度 count获取数组的元素的个数NSLog(@"%ld",arr3.count);//2)根据下标,获取下标对应的对象NSLog(@"%@",[arr3 objectAtIndex:3]);//3)返回元素的下标NSUInteger loc = [arr3 indexOfObject:@"three"];

NSLog(@"%ld",loc);//4)数组中是否包含了某个元素if([arr3 containsObject:@"four"]){

NSLog(@"包含此元素");

}else{

NSLog(@"不包含");

}//定义一个数组NSArray *arr = @[@"one",@"two",@"three",@"four"];//对数组进行遍历//1) 普通的方式,通过下标访问for(inti=0; i<arr.count; i++) {

NSLog(@"-> %@",arr[i]);

}//2) 快速枚举法 for循环的增强形式for(NSString * strinarr) {

NSLog(@"---> %@",str);

}//3) 使用block的方式,进行访问//数组元素 元素下标 是否停止//stop:YES 会停止, stop:NO 不会停止[arr enumerateObjectsUsingBlock:^(idobj, NSUInteger idx, BOOL *stop) {if(idx ==2){*stop = YES;//停止//

break;}else{

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

}

}];//定义一个数组NSArray *arr = @[@1,@2,@3,@4];//1)把数组中的元素用 "-" 连接起来//[数组 componentsJoinedByString @"分隔符"];//1-2-3-4NSString *str = [arr componentsJoinedByString:@"-"];

NSLog(@"str = %@",str);//2) 给一个字符串,分割成一个数组//400-800-12580//取得 400 12580 800NSString *str2 =@"400-800-12580";

NSArray*arr2 = [str2 componentsSeparatedByString:@"-"];

NSLog(@"%@",[arr2 firstObject]);

NSLog(@"%@",[arr2 lastObject]);

NSLog(@"%@",arr2[1]);

str2=@"400-800-12580#400-888-11200";

NSArray*arr3 = [str2 componentsSeparatedByString:@"#"];

NSLog(@"arr3 = %@",arr3);//第一个电话的每一部分NSArray *arr4 = [[arr3 firstObject] componentsSeparatedByString:@"-"];

NSLog(@"arr4 = %@",arr4);

NSArray*arr5 = [[arr3 lastObject] componentsSeparatedByString:@"-"];

NSLog(@"arr5 = %@",arr5);

NSArray的一些用法

NSMutableArray

//数组的使用//1)创建数组//i. 空数组NSMutableArray *arr1 =[NSMutableArray array];

NSLog(@"%p",arr1);//ii.创建的时候初始化一个元素NSMutableArray *arr2 = [NSMutableArray arrayWithObject:@"one"];//iii.创建数组的时候,初始化多个元素NSMutableArray *arr3 = [NSMutableArray arrayWithObjects:@"one",@"two",@3,nil];//IV . 创建一个数组,并且指定长度,NSMutableArray *arr4 = [NSMutableArray arrayWithCapacity:5];//2) 添加元素[arr1 addObject:@"fengjie"];

NSLog(@"%p",arr1);//插入元素到指定的位置[arr1 insertObject:@"zbz"atIndex:0];//3) 删除元素//根据对象内容删除[arr1 removeObject:@"zbz"];//根据位置删除[arr1 removeObjectAtIndex:1];//全部删除[arr1 removeAllObjects];//4) 修改元素//two --> four[arr3 replaceObjectAtIndex:1withObject:@"four"];//four --> five//更加简单地方法arr3[1] =@"five";

NSLog(@"%@",arr3);//5) 查找元素BOOL isSearch = [arr3 containsObject:@"four"];

NSLog(@"%d",isSearch);//6) 交换元素//1 2 3 4 5//5 2 3 4 1//temp = a[0];//a[0] = a[len-1];//a[len-1] = temp;NSMutableArray *arr5 =[NSMutableArray arrayWithObjects:@1,@2,@3,@4,@5, nil];//可以交换数组元素[arr5 exchangeObjectAtIndex:0withObjectAtIndex:4];

NSLog(@"%@",arr5);

NSMutableArray的一些用法

NSDictionary

//NSDictionary 不可变的,一旦创建,内容就不能添加\删除(不能改动)//1)创建空字典NSDictionary *dict1 =[NSDictionary dictionary];//key value//zs ---> 张三//ls ---> 李四//2) 创建只有一组键值对的字典NSDictionary *dict2 = [NSDictionary dictionaryWithObject:@"zhangsan"forKey:@"zs"];//3)创建多组键值对的字典//value值,key值NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"k1",@"value2",@"k2", nil];//注意;//字典的key值和value值,都必须是对象//4)快速创建一个字典//@{,,key值:value值,,,};//key值不能重复://如果重复了,也不会报错//如果重复了,最后添加的将不能够保存到字典中NSDictionary*dict4 = @{@"zs":@"zhaosi",@"zs":@"zhangsan",@"ls":@"lisi",@"bz":@"banzhang"};

NSLog(@"%@",dict4);//以%@格式打印字典,控制台输出一个{ }//5)获取字典的长度NSLog(@"%lu",dict4.count);//6)根据key值取出value值//zs zhaosi//keyNSString *str = [dict4 objectForKey:@"zs"];

NSLog(@"str = %@",str);//7) 字典的遍历问题//第一步:获取所有的key//第二步:根据key获取value//for(NSString *key in dict4){//NSLog(@"key = %@,value = %@",key,[dict4 objectForKey:key]);//}//key value stop[dict4 enumerateKeysAndObjectsUsingBlock:^(idkey,idobj, BOOL *stop) {

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

}];

NSDictionary的一些用法

NSMutableDictionary

//1)可变字典的创建NSMutableDictionary *dict1 = [NSMutableDictionary dictionary];//创建空字典NSMutableDictionary *dict2 = [NSMutableDictionary dictionaryWithCapacity:3];//2)给可变字典添加键值对[dict1 setValue:@"zhaosi"forKey:@"ls"];//因为key值重复了,所以添加不上[dict1 setValue:@"lisi"forKey:@"ls"];//ls[dict1 setValue:@"liuneng"forKey:@"ln"];

NSLog(@"%@",dict1);//3) 删除//[dict1 removeObjectForKey:@"ls"];//[dict1 removeAllObjects];NSLog(@"%@",dict1);//4)修改//[dict1 setObject:@"zhaosi"forKey:@"ls"];//简写形式dict1[@"ls"] =@"xxxxx";

NSLog(@"%@",dict1);//5)查找//获取所有的key值NSArray *arr =[dict1 allKeys];if([arr containsObject:@"ls"]){

NSLog(@"存在ls的key");

}

}

NSMutableDictionary的一些用法

NSFileManager

//NSFileManager 用于判断NSString*filePath =@"/Users/apple/Desktop/arr.plist";

NSString*filePath2 =@"/";//1) 判断文件是否存在//创建文件管理对象//调用defaultManager 创建一个文件管理的单例对象//单例对象:在程序运行期间,只有一个对象存在NSFileManager *fm =[NSFileManager defaultManager];//YES 存在 NO 不存在BOOL isYES =[fm fileExistsAtPath:filePath];

NSLog(@"-->%d",isYES);if(isYES){

BOOL isDir;//2) 判断是否是一个目录[fm fileExistsAtPath:filePath isDirectory:&isDir];if(isDir) {

NSLog(@"这是一个目录");

}else{

NSLog(@"这不是一个目录");

}

}//3) 判断文件是否可读isYES=[fm isReadableFileAtPath:filePath];//4) 是否可写isYES =[fm isWritableFileAtPath:filePath2];//5) 是否可删除isYES =[fm isDeletableFileAtPath:filePath2];

NSLog(@"-->%d",isYES);//创建文件对象NSFileManager *fm =[NSFileManager defaultManager];

NSString*filePath =@"/Users/apple/Desktop/arr.plist";

NSString*dirPath =@"/Users/apple/Desktop/a";//1)如何获取文件的信息(属性)NSDictionary *dict =[fm attributesOfItemAtPath:filePath error:nil];

NSLog(@"%@",dict);

NSLog(@"%@,%@",[dict objectForKey:@"NSFileOwnerAccountName"],dict[@"NSFileOwnerAccountName"]);//2)获取指定目录下文件及子目录//使用递归的方式 获取当前目录及子目录下的所有的文件及文件夹NSArray *subPaths =[fm subpathsAtPath:dirPath];//subpathsOfDirectoryAtPath 不是使用递归的方式获取的subPaths =[fm subpathsOfDirectoryAtPath:dirPath error:nil];

NSLog(@"subPaths = %@",subPaths);//3)获取指定目录下的文件及目录信息(不在获取后代路径)subPaths =[fm contentsOfDirectoryAtPath:dirPath error:nil];

NSLog(@"subPaths = %@",subPaths);

NSFileManager的一些用法

NSNumber

inta =10;intx =100;floatf1 =3.23f;doubled1 =2.34;//numberWithInt 把int 转换为 NSNumberNSNumber *intObj =[NSNumber numberWithInt:a];

NSMutableArray*array =[NSMutableArray arrayWithObjects:intObj, nil];//float ---> NSNumberNSNumber *floatObj =[NSNumber numberWithFloat:f1];

[array addObject:floatObj];//double ---> NSNumberNSNumber *dObj =[NSNumber numberWithDouble:d1];//把对象添加到数组中[array addObject:dObj];//@(变量名) ---> 把 x 转换为NSNumber对象[array addObject:@(x)];//@数值,把数值包装成对象[array addObject:@18];

NSLog(@"array = %@",array);//数组的第一个元素和第二个元素相加//array[0]+array[1]//1)取出数组的元素//2)把数组元素转换为基本数据类型的数据NSNumber *n1 = array[0];inta1 = [n1 intValue];//获取对象的整形值NSNumber*n2 = array[1];floatf2 =[n2 floatValue];

a1= [array[0] intValue]+[array[1] floatValue];

NSLog(@"%d",a1);

NSNumber的一些用法

NSValue

//创建一个结构体变量,保存点//p1 是 CGPoint 类型的结构体变量CGPoint p1 = CGPointMake(20,50);

NSRect r1= NSMakeRect(0,0,200,100);//创建数组NSMutableArray *arr =[NSMutableArray array];//p1 ---> obj//valueWithPoint 把结构体转换为NSValue对象NSValue *pointVal =[NSValue valueWithPoint:p1];//把对象存放到数组中[arr addObject:pointVal];

[arr addObject:[NSValue valueWithRect:r1]];

NSLog(@"arr = %@",arr);//取出r1的值//rectValue 从NSValue对象中,取得NSRect类型的值NSValue *r1Val =[arr lastObject];

NSRect r2=[r1Val rectValue];

NSLog(@"%@",NSStringFromRect(r2));

typedefstructD{intyear;intmonth;intday;

} MyDate;//MyDate是一个别名//保存 一个 年月日//2015-7-30MyDate md = {2015,7,30};//md -----> obj//@encode(MyDate) 作用,把MyDate类型生成一个常量字符串描述NSValue *val = [NSValue valueWithBytes:&md objCType:@encode(MyDate)];//定义一个数组,把val存到数组中NSMutableArray *arr =[NSMutableArray arrayWithObject:val];//从数组中取出来NSValue对象//从对象中,取出结构体变量的值//传入一个结构体变量的地址MyDate tmd;//getValue获取结构值,保存到结构体变量tmd[val getValue:&tmd];

NSLog(@"%d,%d,%d",tmd.year,tmd.month,tmd.day);

NSValue的一些用法

NSDate

//创建一个日期时间对象//获取当前时间NSDate *d1 =[NSDate date];//0时区时间,北京 东8区//当前时间上+8小时,得到的就是现在时间NSLog(@"%@",d1);//2015-07-30 12:20:25 +0000//格式化日期//NSDateFormatter 日期格式化//2015年07月30日 20:20:25//2015-07-30 20:22:15NSDateFormatter *formatter = [NSDateFormatternew];//设置日期的显示格式的//yyyy 表示四位的年份//MM 表示2位的月份//dd 表示2位的天数//HH 表示24小时制得小数 hh - 12小时值//mm 表示2位的分钟数//ss 表示2位的秒数formatter.dateFormat =@"yyyy年MM月dd日 HH:mm:ss";

formatter.dateFormat=@"yyyy-MM-dd HH:mm:ss";//格式化日期NSString *dateStr =[formatter stringFromDate:d1];

NSLog(@"%@",dateStr);

NSDateFormatter*formatter = [NSDateFormatternew];//设置日期的显示格式的//yyyy 表示四位的年份//MM 表示2位的月份//dd 表示2位的天数//HH 表示24小时制得小数 hh - 12小时值//mm 表示2位的分钟数//ss 表示2位的秒数formatter.dateFormat =@"yyyy年MM月dd日 HH:mm:ss";

formatter.dateFormat=@"yyyy-MM-dd HH:mm:ss";//计算明天的此刻//距现在时间 24 小时以后,明天的此刻NSTimeInterval t =60*60*24;

NSDate*tom =[NSDate dateWithTimeIntervalSinceNow:t];//计算昨天的时间NSDate *zuotian = [NSDate dateWithTimeIntervalSinceNow:-t];//格式化显示时间NSString *timeStr =[formatter stringFromDate:zuotian];

NSLog(@"timeStr = %@",timeStr);//日期对象//2015-07-30 20:22:15//year month day//NSCalendar 日期类,可以帮我们快速的获取年月日 时分秒信息NSDate *d =[NSDate date];//创建日期的对象NSCalendar *cal =[NSCalendar currentCalendar];//cal components:获取日期的哪些部分 fromDate:日期对象NSDateComponents *coms = [cal components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:d];

NSLog(@"year:%ld,month:%ld,day:%ld",coms.year,coms.month,coms.day);

NSDate的一些用法

小知识点:

位枚举:枚举值是2的0次方、1次方、2次方...

它的存在是为了有些方法中需要写入枚举值,但有时候我们并不需要枚举这时候可以用0来填写枚举值

他的枚举值可以用“ | ”(或)来一起选择

解释:

2 的 0 次方 1 00000001

2 的 1 次方 2 00000010

2 的 2 次方 4 00000100

2 的 3 次方 8 00001000

用“ | ”或正好能把想用的枚举值都用到 例如用1和2 00000011

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航