1、iOS沙盒(sandbox)机制
每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用的文件系统隔离,
ios系统不允许访问其他应用的应用沙盒。在ios8中已经开放访问(extension)。
应用沙盒一般包括以下几个文件目录:应用程序包、Documents、Libaray(下面有Caches和Preferences目录)、tmp。
应用程序包:包含所有的资源文件和可执行文件。
Documents:保存应用运行时生成的需要持久化的数据,iTunes会自动备份该目录。
苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录
tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。
应用没有运行时,系统也有可能会清除该目录下的文件,iTunes不会同步该目录。iphone重启时,该目录下的文件会丢失。
Library:存储程序的默认设置和其他状态信息,iTunes会自动备份该目录。
Libaray/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除。一般存放体积比较大,不是特别重要的资源。
Libaray/Preferences:保存应用的所有偏好设置,ios的Settings(设置)应用会在该目录中查找应用的设置信息,iTunes会自动备份该目录。
获取绝对路径的方法:
NSSearchPathForDirectoriesInDomains 返回一个绝对路径用来存放我们需要储存的文件
第一个参数:要获取的沙盒文件夹名称
第二个参数:
NSUserDomainMask = 1,//用户主目录中
NSLocalDomainMask = 2,//当前机器中
NSNetworkDomainMask = 4,//网络中可见的主机
NSSystemDomainMask = 8,//系统目录,不可修改(/System)
NSAllDomainsMask = 0x0ffff,//全部
第三个参数:YES/NO 是否获取全路径
2.常见结构体
NSPoint和CGPoint的使用:CGPoint和NSPoint是同义的
typedef CGPoint NSPoint;
struct CGPoint {
CGFloat x;
CGFloat y;
};
typedef struct CGPoint CGPoint;typedef double CGFloat; //64位是double, 32位是float
CGPoint代表的是二维平面中的一个点,可以使用CGPointMake和NSMakePoint函数创建CGPoint。
NSSize和CGSize的使用:CGSize和NSSize是同义的
typedef CGSize NSSize;
struct CGSize {
CGFloat width;
CGFloat height;
};
typedef struct CGSize CGSize;
CGSize代表的是二维平面中的某个物体的尺寸(宽度和高度),可以使用CGSizeMake和NSMakeSize函数创建CGSize。
CGRect和NSRect是同义的,typedef CGRect NSRect;
CGRect的定义struct {
CGPoint origin;
CGSize size;
};
typedef struct CGRect CGRect;
CGRect代表的是二维平面中的某个物体的位置和尺寸,可以使用CGRectMake和NSMakeRect函数创建CGRect。
苹果官方的推荐是CG开头的,歪国人真是搞不懂....
3.NSNumber的使用
NSArray\NSDictionary中只能存放OC对象, 不能存放int\float\double等基本数据类,
如果真想把基本数据(比如int)放进数组或字典中, 需要先将基本数据类型包装成OC对象
NSNumber可以将基本数据类型包装成对象,这样就可以间接将基本数据类型存进NSArray\NSDictionary中。
以前的创建方法:
+ (NSNumber *)numberWithInt:(int)value;
+ (NSNumber *)numberWithDouble:(double)value;
+ (NSNumber *)numberWithBool:(BOOL)value;
很显然,太麻烦,现在的写法直接@,注意如果是变量@后加();
4.NSValue的使用
NSValue包装对象指针,CGRect结构体等。
一个NSValue对象是用来存储一个C或者Objective-C数据的简单容器。
它可以保存任意类型的数据,比如int,float,char,当然也可以是指pointers, structures, and object ids。
NSValue类的目标就是允许以上数据类型的数据结构能够被添加到集合里,例如那些需要其元素是对象的数据结构,
如NSArray或者NSSet的实例。需要注意的是NSValue对象一直是不可枚举的。
为了方便 结构体 和 NSValue 的转换, Foundation提供了以下方法
将结构体包装成NSValue对象 -------> 存储结构体到集合中
+ (NSValue *)valueWithPoint:(NSPoint)point;
+ (NSValue *)valueWithSize:(NSSize)size;
+ (NSValue *)valueWithRect:(NSRect)rect;
从NSValue对象取出之前包装的结构体
-(NSPoint)pointValue;
-(NSSize)sizeValue;
-(NSRect)rectValue;
不能直接放NSPoint类型的数据在数组中。
5.NSDate的使用
NSDate可以用来表示时间, 可以进行一些常见的日期\时间处理
一个NSDate对象就代表一个时间
[NSDate date]返回的就是当前时间
获取当前时区的时间:
NSDate *a = [NSDate date];
NSLog(@“%@”,a);
//设置时区
NSTimeZone*zone = [NSTimeZonesystemTimeZone];
//设置时间间隔
NSIntegerinterval = [zone secondsFromGMTForDate: a];
//重新生成时间
NSDate*localeDate = [a dateByAddingTimeInterval: interval];
NSLog(@"%@", localeDate);
格式化日期:
//定义NSDate
NSDate*d1 = [NSDatedate];//定义日期时间格式化的类
NSDateFormatter*formatter = [[NSDateFormatteralloc] init];
formatter.dateFormat= @"yyyy-MM-dd HH:mm:ss";//把Date转换为dataStr
NSString*dateStr = [formatter stringFromDate:d1];
//定义日期时间格式化的类
NSDateFormatter*formatter = [[NSDateFormatteralloc] init];
formatter.dateFormat= @"yyyy-MM-dd HH:mm:ss";//把dataStr转换为Date
NSDate*date = [formatter dateFromString:@"2015-02-01 02:30:19"];
NSLog(@"%@",date);