黑马程序员---成长之路-----OC之基础篇Foundation&copy

------<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、判断文件是否存在
<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 components: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(因为是新产生的)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值