黑马程序员---成长之路-----OC之基础篇Foundation©
2015-10-19 01:39
489 查看
------<a href="http://www.itheima.com"target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流!
NSFileManager的介绍和用法
NSFileManager是用来管理文件系统的,它可以用来进行常见的文件、文件夹操作(拷贝、剪切、创建等)
NSFileManager使用了单例模式singleton
使用defaultManager方法可以获得那个单例对象
[NSFileManager defaultManager]
NSFileManager基本(常见判断)
NSFileManager用于判断
NSString *filePath=@"文件路径";
1、判断文件是否存在
2、判断是否是一个目录
3、判断文件是否可读(系统文件或目录不允许读)
4、是否可写(系统文件或目录不允许写)
5、是否可删除(系统文件或目录不允许删除)
1、如何获取文件信息(属性)
2、获取指定目录下文件及子目录
3、获取指定目录下的文件及子目录(不在获取后代路径)
用法:
IOS沙盒(sandbox)机制及获取沙盒路径
每个IOS应用都有自己的应用沙盒,应用沙盒就是文件系统目录,
与其他应用的文件系统隔离,ios系统不允许访问其他应用的应用沙盒,
在iOS8中已经开放访问(extension)。
沙盒:文件系统
每个应用程序都有自己的沙盒(iOS中每个应用程序,只能访问自己的沙盒)
ios8开始,开放了几个固定区域
沙盒包含:
应用程序包
Documents 持久化的数据
tmp 临时目录
Library
cache 缓存
Preferences 配置信息\SQLite
沙盒路径获取的方法:
1、沙盒的路径
NSHomeDirectory()
2、Documents路径
NSDocumentDirectory表示获取沙盒的Documents目录
常见的结构体
NSPoint和CGPoint的使用
//用法
CGPoint c1//c1是一个CGPoint结构体类型的变量
NSNumber是OC中处理数值类型的一个类
如何处理:
把基本数据类型的数据包装成一个对象
使用NSNumber的好处:
可以把基本数据类型的数据保存到数组或者字典中
如何使用NSNumber?
1、int--->obj
NSValue的介绍和使用
NSNumber是NSValue的子类,NSValue主要用来把指针,CGRect结构体等包装成OC对象,以便存储
NSDate的介绍和使用
是OC中提供日期处理的一个类
可以用来表示时间,可以进行一些常见的日期、时间处理
一个NSDate对象就代表一个时间
[NSDate date]返回的就是当前时间
集合对象的内存管理
只要把对象放到数组中,对象计数器就会+1
数组在销毁的时候,对对象发送了一次release消息
销毁顺序:数组先挂--》数组向其中的对象也发送release
结论:
1、当对象被添加到数组中的时候,对象的引用计数+1
2、当数组销毁的时候,数组会向它其中的元素发送一次release消息
注意:数组被销毁了,但是它里面存储的对象不一定被销毁
普遍规律:
1、如果方法名是add\insert开头,那么背添加的对象计数器会+1
2、如果方法名是remove\delete开头,那么被移除的对象计数器-1
copy概念
对象拷贝的目的:要使用某个对象的数据,但是 在修改对象的时候不影响原来的对象内容
常见的赋值有用一个源文件产生:文件复制
作用:一个副本文件
特点:
修改源文件的内容,不会影响副本文件
修改副本文件的内容,不会影响源文件
OC中的copy,就是指的对象的拷贝
作用:利用一个源对象产生一个副本对象
修改源对象的属性和行为,不会影响副本对象
修改副本对象的属性和行为,不会影响源对象
使用copy
一个对象可以调用copy或mutableCopy方法来创建一个副本对象
copy:创建的是不可变副本(如NSString、NSArray)
mutableCopy:创建的是可变副本(如:mutableCopyNSString)
使用copy功能的前提
copy:需要遵守NSCopy协议,实现copyWithZone:方法
copy 不可变的对象,进行了copy以后,没有重新分配内存空间
这是浅拷贝(只是拷贝了地址,并没有真正的分配新的内存空间)
源对象引用计数+1
副本对象指向源对象,引用计数也加一
mutableCopy 可变的对象,这就是一个深拷贝:
1、开辟了一个新的空间,存储副本对象 2、副本对象的引用计数为1
源对象引用计数器不变,副本对象计数器为1(因为是新产生的)
NSFileManager的介绍和用法
NSFileManager是用来管理文件系统的,它可以用来进行常见的文件、文件夹操作(拷贝、剪切、创建等)
NSFileManager使用了单例模式singleton
使用defaultManager方法可以获得那个单例对象
[NSFileManager defaultManager]
NSFileManager基本(常见判断)
NSFileManager用于判断
NSString *filePath=@"文件路径";
1、判断文件是否存在
<span style="font-size:14px;">//创建文件管理对象 //调用defaultManger创建一个文件管理的单例对象 //单例对象:在程序运行期间,只有一个对象存在 NSFileManager *fm=[NSFileManager defaultManager] //YES存在 NO不存在 BOOL isYES=[fm fileExistaAtPath:filePath]; NSLog(@"-->%d",isYES); if(isYES){ BOOL isDir;</span>
2、判断是否是一个目录
<span style="font-size:14px;">[fm fileExistsAtPath:filePath isDirectory:&isDir]; if(isDir){ NSLog(@"这是一个目录"); }else{ NSLog(@"这不是一个目录"); } } </span>
3、判断文件是否可读(系统文件或目录不允许读)
<span style="font-size:14px;">isYES=[fm isReadableFileAtPath:filePath]; NSLog(@"-->%d",isYES); </span>
4、是否可写(系统文件或目录不允许写)
<span style="font-size:14px;">isYES=[fm isWritableFileAtPath:filePath]; NSLog(@"-->%d",isYES); </span>
5、是否可删除(系统文件或目录不允许删除)
<span style="font-size:14px;">isYES=[fm isDeletableFileAtPath:filePath]; NSLog(@"-->%d",isYES); } retur 0; } </span>
1、如何获取文件信息(属性)
<span style="font-size:14px;">NSDiction *dict=[fm attributesOfItemAtPath:filePath error:nil] NSLog(@"%@",dict); //查看单个属性 NSLog(@"%@,%@",[dict objectForKey:@"NSFileOwnerAccountName"],dict[@"NSFileOwnerAccountName"]);</span>
2、获取指定目录下文件及子目录
<span style="font-size:14px;">//使用递归的方式获取当前目录及其子目录下的所有的文件及文件夹 NSArray *subPaths=[fm subpathsPath:dirPath]; //不是使用递归的方式获取的 subPaths=[fm subpathsOfDirectoryAtPath:dirPath error:nil]; NSLog(@"subPaths=%@",subPaths); </span>
3、获取指定目录下的文件及子目录(不在获取后代路径)
<span style="font-size:14px;">subPaths=[fm contentsOfDirectoryAtPath:dirPath error:nil]; NSLog(@"subPath=%@",subPaths);</span>
用法:
<span style="font-size:14px;">//创建文件管理对象 NSFileManager *fm=[NSFileManager defaultManager]; //如何创建目录(路径:/Users/zhaoxiaohu/Desktop/aaa) NSString *createDirPath=@"/Users/zhaoxiaohu/Desktop/aaa"; //fm createDirectoryAtPath:@"路径" withIntermediateDirectories:YES/NO创建路径的时候,YES自动创建路径中缺少的目录 attributes:属性的字典 error:错误对象 BOOL isYES=[fm createDirectoryAtPath:createDirPath withIntermediateDirectories:YES attributes:nil error:nil]; if(isYES){NSLog(@"成功");} //如何创建文件 NSString *str=@"当我错过一个女孩,我就向山上放一块砖,于是就有了长城"; //writeToFile //fm createFileAtPath:@"路径"contents:NSData类型的数据 attributes:文件的属性的字典 //创建NSData? 是一个处理二进制数据的类 //NSString---->NSData NSData *data=[str dataUsingEncoding:NSUTF8StringEncoding]; BOOL isYES; //createFileAtPath创建文件 isYES=[fm createFileAtPath:createDirPath contents:data attributes:nil]; NSLog(@"isYES=%d",isYES); //如何copy文件 NSString *targetPath=@"/Users/zhaoxiaohu/Desktop/aaa/bbb/love.txt"; [fm copyItemAtPath:createDirPath toPath:tagetPath error:nil]; //如何移动文件 [fm moveItemAtPath:createDirPath toPath:targetPath error:nil]; //如何删除文件 [fm removeItemAtPath:targetPath error:nil];</span>
IOS沙盒(sandbox)机制及获取沙盒路径
每个IOS应用都有自己的应用沙盒,应用沙盒就是文件系统目录,
与其他应用的文件系统隔离,ios系统不允许访问其他应用的应用沙盒,
在iOS8中已经开放访问(extension)。
沙盒:文件系统
每个应用程序都有自己的沙盒(iOS中每个应用程序,只能访问自己的沙盒)
ios8开始,开放了几个固定区域
沙盒包含:
应用程序包
Documents 持久化的数据
tmp 临时目录
Library
cache 缓存
Preferences 配置信息\SQLite
沙盒路径获取的方法:
1、沙盒的路径
NSHomeDirectory()
2、Documents路径
NSDocumentDirectory表示获取沙盒的Documents目录
常见的结构体
NSPoint和CGPoint的使用
//用法
CGPoint c1//c1是一个CGPoint结构体类型的变量
<span style="font-size:14px;">c1.x=20; c1.y=100; CGPoint c2={10,10}; CGPoint c3={.x=10}; NSpoint np1; np1.x=10 xp1.y=100; //OC中特有的赋值方式 CGPoint c4=CGPointMake(10,10); NSPoint np2=NSMakePoint(5,5); //CGSize和NSSize //用来表示平面面积(大小) //width(宽)height(高) CGSize s1; s1。width=200; s1.height=200; //OC特有的方式 CGSize s2=CGSizeMake(100,100); NSSize ns=NSMakeSize(10,10); //CGRect和NSRect //表示在平面上左上角是某个点的矩形区域 //orogin 表示矩形的左上角的点 //size表示矩形的大小 CGRect r1; //C语言赋值方式 r1.origin.x=0; r1.orogin.y=0; r1.size.width=200; r1.size.height=80; CGRect r2={{0,1},{20,34}} //OC特有方式 //CGXXXX CGXXXXMake CGRect r3=CGRectMake(10,10,100,30); //NSXXXX NSMakexxxx NSRect nr1=NSMakeRect(10,10,50,50); //快速查看结构体值 NSLog(@"nr1=%@",NSStringFromRect(nr1)), //结果:nr1={{10,10},{50,50}}</span>
NSNumber是OC中处理数值类型的一个类
如何处理:
把基本数据类型的数据包装成一个对象
使用NSNumber的好处:
可以把基本数据类型的数据保存到数组或者字典中
如何使用NSNumber?
1、int--->obj
<span style="font-size:14px;">int a=10; int x=1; NSArray *array=[NSArray arrayWithObject:a,nil];//报错,因为a是基本数据类型 NSNumber *intobj=[NSNumber numberWithInt:a]; NSArray *array=[NSArray arrayWithObject:intobj,nil];//这个是经过包装的 NSLog(@"array=%@",array); //@(变量名)---》把X转化为NSNumber对象 [array addObject:@(x)]; //@数值,把数值包装成对象 [array addObject:@18]; </span>
NSValue的介绍和使用
NSNumber是NSValue的子类,NSValue主要用来把指针,CGRect结构体等包装成OC对象,以便存储
NSDate的介绍和使用
是OC中提供日期处理的一个类
可以用来表示时间,可以进行一些常见的日期、时间处理
一个NSDate对象就代表一个时间
[NSDate date]返回的就是当前时间
<span style="font-size:14px;">1、获取当前时区的时间 //定义NSDate NSDate *d1=[NSDate date];//创建一个日期时间对象 //0时区的时间,北京在东八区 //当前时间+上八小时,得到的就是现在时间 NSLog(@"%@",d1); //2、格式化显示时间 //NSDateFormatter 日期格式化 NSDateFormatter *formatter=[NSDateFormatter new]; //设置日期的显示格式的 //yyyy表示四位的年份MM表示2位的月份dd表示2位的天数 //HH表示24小时制的小时 hh十二小时制 //mm表示2位的分钟数 //ss表示两位的秒数 formatter.dateFormat=@"yyyy年MM月dd日 HH:mm:ss"; //格式化日期 NSString *dateStr=[formatter stringFormDate:d1]; NSLog(@"%@",dateStr); //2015-05-07 格式 formatter.dateFormat=@"yyyy-MM-dd HH:mm:ss"; //3、计算时间() //计算明天的此刻 //距现在时间 24 小时以后,明天的此刻 NSTimeInterval t=60*60*24; NSDate *tom=[NSDate dateWithTimeIntervalSinceNow:t]; //格式化显示时间 NSString *timeStr=[formatter stringFormDate:tom]; NSLog(@"timeStr=%@",timeStr); //计算昨天时间 NSDate *tom=[NSDate dateWithTimeIntervalSinceNow:-t]; //4、日期时间对象的使用 //NSCalendar日期类,可以帮我们快速的获取年月日 时分秒信息 NSDate *d=[NSDate date]; //创建日期对象 NSCalendar *cal=[NSCalendar currentCalendar]; //cal components:获取日期的那些部分 formDate:日期对象 NSDateComponents *coms=[cal component a400 s:NScalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:d]; NSLog(@"year:%ld,month:%ld,day:%ld",coms.year,coms.month,coms.day);</span>
集合对象的内存管理
只要把对象放到数组中,对象计数器就会+1
数组在销毁的时候,对对象发送了一次release消息
销毁顺序:数组先挂--》数组向其中的对象也发送release
结论:
1、当对象被添加到数组中的时候,对象的引用计数+1
2、当数组销毁的时候,数组会向它其中的元素发送一次release消息
注意:数组被销毁了,但是它里面存储的对象不一定被销毁
普遍规律:
1、如果方法名是add\insert开头,那么背添加的对象计数器会+1
2、如果方法名是remove\delete开头,那么被移除的对象计数器-1
copy概念
对象拷贝的目的:要使用某个对象的数据,但是 在修改对象的时候不影响原来的对象内容
常见的赋值有用一个源文件产生:文件复制
作用:一个副本文件
特点:
修改源文件的内容,不会影响副本文件
修改副本文件的内容,不会影响源文件
OC中的copy,就是指的对象的拷贝
作用:利用一个源对象产生一个副本对象
修改源对象的属性和行为,不会影响副本对象
修改副本对象的属性和行为,不会影响源对象
使用copy
一个对象可以调用copy或mutableCopy方法来创建一个副本对象
copy:创建的是不可变副本(如NSString、NSArray)
mutableCopy:创建的是可变副本(如:mutableCopyNSString)
使用copy功能的前提
copy:需要遵守NSCopy协议,实现copyWithZone:方法
copy 不可变的对象,进行了copy以后,没有重新分配内存空间
这是浅拷贝(只是拷贝了地址,并没有真正的分配新的内存空间)
源对象引用计数+1
副本对象指向源对象,引用计数也加一
mutableCopy 可变的对象,这就是一个深拷贝:
1、开辟了一个新的空间,存储副本对象 2、副本对象的引用计数为1
源对象引用计数器不变,副本对象计数器为1(因为是新产生的)
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- Objective-C的内省(Introspection)用法小结
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器
- IOS开发第三方语音-微信语音
- 解析iOS开发中的FirstResponder第一响应对象