您的位置:首页 > 职场人生

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

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、判断文件是否存在
<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(因为是新产生的)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息