作用:进行常见的文件操作(拷贝,创建等);
特点:单例模式,不需要NEW对象获取;
NSFileManger *fm=[NSFileManger defaultManger];///获取此类对象
功能:
文件操作:
创建:-(BOOL)creatFileAtPath:路径 contents:内容 attributes:属性;(内容:NSData类型)
1.文件下载思路:
客户端发送请求->服务器响应,返回NSData->客户端接受数据;
2.沙盒机制(sandbox):每个iOS应用都有自己的应用沙盒,即文件系统目录.属于封闭式的,所有APP都在单独的沙盒中运行;为了:1⃣️完美的用户体验需要对跨应用程序进行整合统一;2⃣️封闭跨应用可以保证系统的安全性;(iOS8以后开放了几个固定的系统区域,例如第三方图片编辑,第三方输入法等)
应用沙盒一般包括:
3.获取沙盒路径:
NSRange范围,NSPoint/CG二维坐标,NSSize/CGSize 大小,NSRect/CGRect 二维矩形区域.
NSPoint和CGPoint同义,前者是后者别名;
此类结构体有专门的打印NSLog方式:
NSLog(@"%@"NSStringFromPoint( ));//Point换
新增快速赋值方式:NSPoint=NSMakePoint(x,y);/CGPoint=CGPointMake(x,y) //其他结构体赋值方式类似
由于NSArray和NSDictionary等集合只能存放对象,不能存基本数据类型.所以OC中构建了NSNumber类来包装基本类型成对象;
作用:封装.
+(NSNumber*)numberWithInt: ;
//int可换成其他基本类型保留字
此方法简写:@常量/@(变量)
例:NSSArray *arr=@[对象1,对象2,
@(a),@15];
取回用 -(int)intValue等方法即可
NSNumber的父类,用于指针.结构体的对象包装.
1⃣️,结构体包装:常用:
+(NSValue*)valueWithPoint:(NSPoint)point
+....size
+...rect
取回-(NSPoint)pointValue: ;
...
对于自定义结构体:
+(NSValue*)valueWithBytes:结构体指针(地址) objCType:@encode(类型描述符)
常用方法:
NSCalendar * cal=[NSCalendar currentCalendar];
[cal components:要获取的内容 fromDate:从哪个时间对象]
**add一个对象到集合中,那么该对象的引用计数器+1;
当集合被销毁时,会向集合中元素发送release消息;
创建集合时方法里调用了//autorelease方法释放池结束…**
目的:copy某个对象数据,使在修改时互不影响.
前提:自定义对象所属类必须遵守NSCopying协议.才能copy;使用时系统会默认调用此协议的方法copyWithZone;
@protocol NSCopying
-(id)copyWithZone:(NSZong*)zone;
@end
实现:
-(id)copyWithZone:(NSZong*)zone{
//1.产生新对象
Person *p=[Person new];
//2.把源对象中的属性值都拷贝到新对象中
p.name=self.name;
//3.返回新对象
return p;
}
//使用MUtablecopy时协议和方法名称换一下即可(zone是以前为了防止堆区内存碎片,现在不用管了)
两种方式:
copy和mutableCopy;
不论源对象是否为可变对象
源对象-copy-不可变副本对象
源对象-mutableCopy-可变副本对象;
而只有源对象和副本对象都不可变时,为浅复制,其余都是深复制
MAR下:
ARC下:
作用:在开发中用于多个界面传值; 只创建一个对象,节省内存.
概念:单例模式的意图是类的对象成为系统中唯一的实例,提供一个访问点,共享;
使用场景:
特点:
需要覆盖的方法:
-(id)copyWithZone:(NSZone*)zone{
return self;
}
+(id)allocWithZone:(NSZone*)zone{
//线程保护
@synchronized(self) {
if (instances == nil) {
//调用父类的alloc
instances = [super allocWithZone:zone];
return instances;
}
}
return instances;
}
-(id)retain{
return self;
}
-(NSUInteger)retainCount{
return NSUIntegerMax;
}
-(oneway void)release{
}
-(id)autorelease{
return self;
}
另外新定义一个类方法作为共享访问点:
先在.m中定义一个静态的对象类型的全局变量.并nil//静态区,程序结束释放.
static SingletonClass *instaces=nil;
+(instrancesType)shareXxxx{
if(instaces==nil){
instances=[self allocWithZone:null];
return instances;
}//判断对象是否存在,如果不存在创建新对象.
return instances;
//如果已经存在,什么都不做,直接返回对象
5.1 NSSet介绍:
1> 无序的、不重复的。存放到 NSSet 中的内容并不会排序与添加顺序也没有关系
2> 通过 anyObject 来访问单个元素
3> 遍历 NSSet 中的每个元素。通过forin循环来遍历
4> 好处: 效率高。
5> 应用场景:
- 比如重用 Cell 的时候, 从缓存池中随便获取一个就可以了, 无需按照指定顺序来获取
- 需要把数据存放到一个集合中, 然后判断集合中是否有某个对象的时候
5.2 NSArray介绍:
1> 有序的、可以有重复对象。对象的顺序是按照添加的顺序来保存的
2> 通过下标来访问
3> 好处: 有序访问
4> 应用场景: 在绝大多数需要依赖顺序的情况下(比如 tableView 的数据源集合,在实际操作中要根据下标来获取对象)