【黑马程序员】Foundation框架(四)
来源:互联网 发布:qq三国79js奥义三板斧 编辑:程序博客网 时间:2024/05/05 23:09
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
一、iOS沙盒机制(sandbox)
1、沙盒基本概念
每个iOS应用都有自己的应用沙盒,应用沙盒是文件系统的目录,与其他应用的文件系统隔离,iOS系统不允许访问其他应用的应用沙盒。但是在iOS8.0中已经可以开放访问应用沙盒的一部分了。
应用沙盒一般包括以下几个文件目录:应用程序包、Documents、Library(下面有Caches和Prefereces目录)、tmp:
应用程序包:包含所有的资源文件和执行文件
Documents:保存应用运行时生成的需要持久战的数据,iTunes会自动备份目录。苹果建议将程序中建立的或在程序中浏览到得文件数据保存在该目录下,iTune备份和恢复的时候会包括此目录
tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录从该目录删除。应用没有运行时,系统也有可能会清除该目录下的文件,iTunes不会同步该目录。iphone重启时,该目录下的文件会丢失
Library:存储程序的默认蛇者呵其他状态信息,iTunes会自动备份该目录
Library/Caches:存放缓存文件,iTunes不会本分此目录,此目录下文件不会再应用退出删除。一般存放体积比较大,不是特别重要的资源
Library/Preferences:保存应用的所有偏好设置,iOS的Settings(设置)应用会在该目录中查找应用的设置信息,iTunes会自动备份该目录。
*在mac的Xcode5中模拟器路径为:/Users/用户名/Library/Application Support/iPhone Simulator
Xcode6中模拟器路径为:/Users/用户名/Library/Developer/CoreSimulator
2、获取沙盒路径
1)获取沙盒根目录
NSString *homeDirectory = NSHomeDirectory();
2)获取绝对路径
NSSearchPathForDirectoriesInDomains 返回一个绝对路径用来存放我们需要储存的文件
第一个参数:要获取的沙盒文件夹名称
第二个参数:
NSUserDomainMask = 1 用户主目录中
NSLocalDomainMask = 2 当前机器中
NSNetworkDomainMask = 4 网络中可见的主机
NSSystemDomainMask = 8 系统目录,不可修改(/System)
NSAllDomainsMask = 0x0ffff 全部
第三个参数:YES/NO 是否获取全路径
Document目录: 第一个参数为NSDocumentDirectory
Cache目录:第一个参数为NSCachesDirectory
Library目录: 第一个参数为NSLibraryDirectory
tmp目录:
NSString *tmpDir = NSTemporaryDirectory();
常用方法:
在沙盒文件中创建文件夹 在Document目录下创建新的文件夹test
NSArray *arr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);NSString *path = [[arr lastObject] stringByAppendingPathComponent:@"test/a.txt"];NSLog(@"path:%@",path);
二、常见的结构体
1、NSPoint和CGPoint的使用
CGPoint和NSPoint同义,NSPoint为CGPoint的别名
CGPoint的定义:
struct CGPoint{ CGFloat x; CGFloat y;};typedef struct CGPoint CGPoint;
CGPoint代表的时二维平面中的一个点
可以使用CGPointMake呵NSMakePoint函数创建CGPoint
2、NSSize呵CGSize的使用
CGSize和NSSize同义,NSSize是CGSize的别名
CGSize的定义
struct CGSize{ CGFloat width; CGFloat height;};typedef struct CGSize CGSize;
CGSize代表的是二维平面中的物体的尺寸(宽度和高度)
可以使用CGSizeMake和NSMakeSize幻术创建CGSize
3、NSRect和CGRect的使用
CGRect呵NSRect同义,NSRect是CGRect的别名
CGRect的定义
struct CGRect{ CGPoint origin; CGSize size;};typedef struct CGRect CGRect;
CGSize代表的是二维平面中物体的位置呵总尺寸
可以使用CGRectMake和NSMakeRect函数创建CGRect
*苹果官方拓建使用CG开头的
三、NSNumber的使用
1、NSNumber介绍
NSArray\NSDictionary中只能存放OC对象,不能存放int/float/double等基本数据类型数据。
如果要把基本数据数据放到NSArray和NSDictionary中,需要先将基本数据类型类型包装成OC对象。
NSNumber可以将基本数据类型包装成对象,这样就可以间接的将基本数据类型存放进NSArray和NSDictionary中
2、NSNumber创建
numberWithInt方法 NSNumber类方法 参数:int整形数据 返回:返回NSNumber类型
numberWithDouble方法 NSNumber类方法 参数:double类型数据 返回:返回NSNumber类型
numberWithBool方法 NSNumber类方法 参数:BOOL类型数据 返回:返回NSNumber类型 等
简写方式
int类型 => @10; 或者 int num = 10;@(num);
double类型 => @10.5;
BOOL类型 => @YES;
3、常用方法
1)从NSNumber对象中得到基本类型数据
char类型:charValue方法 NSNumber对象方法 无参 返回char类型
int类型:intValue方法 NSNumber对象方法 无参 返回int类型
long类型:longValue方法 NSNumber对象方法 无参 返回long类型
double类型:doubleValue方法 NSNumber对象方法 无参 返回double类型
BOOL类型:boolValue方法 NSNumber对象方法 无参 返回BOOL类型
NSString类型:stringValue方法 NSNumber对象方法 无参 返回NSString*类型
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { @autoreleasepool { NSNumber *num1 = @10; int a =[num1 intValue]; NSNumber *num2 = @10.2; float f = [num2 floatValue]; double d = [num2 doubleValue]; NSNumber *num3 =@YES; BOOL isYes = [num3 boolValue]; printf("%d,%.2f,%.2f,%d\n",a,f,d,isYes); } return 0;}
2)其他方法
对象比较:compare方法 NSNumber对象方法 参数:NSNumber类型对象 返回NSComparisonResult(BOOL)类型
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { @autoreleasepool { NSNumber *num = @10; NSNumber *num1 = @20; NSComparisonResult d = [num compare:num1]; NSLog(@"%ld",d); } return 0;}
四、NSValue的使用
1、NSValue介绍
NSValue包装对象指针,CGRect结构体等。NSNumber是NSValue的子类。
一个NSValue对象是用来存储一个C或辙OC数据的简单容器。它可以保存任何类型的数据,比如int、float、char,当然也可以指pointers/structures等。
NSValue类的目标就是允许以上数据类型的数据结构能够被添加到集合中,例如那些需要其元素是对象的数据结构,如NSArray或者NSSet的实例。
需要注意的时NSValue对象一直是不可枚举的。
2、NSValue常用方法
将结构体包装成NSValue对象
valueWithBytes:objcType方法 NSValue类方法 返回NSValue类型
参数:对象的地址+通常是一个用来描述对象类型和大小的字符串(@encode(结构体名) 可以接收一个数据类型的名称自动生成一个合适的描述字符串)
将NSValue对象转换为结构体
getValue方法 NSValue对象方法 参数:接收结构体的地址 返回void类型
#import <Foundation/Foundation.h>typedef struct{ int year; int month; int day;} Date;int main(int argc, const char * argv[]) { @autoreleasepool { Date d ={2016,01,30}; NSValue *val = [NSValue valueWithBytes:&d objCType:@encode(Date)];//将结构体包装成NSValue NSArray *arr = @[val]; NSLog(@"%@",arr); Date c; [val getValue:&c];//取出value之前包装的结构体数据 } return 0;}
valueWithPoint方法 NSValue类方法 参数:NSPoint结构体 返回NSValue类型
valueWithSize方法 NSValue类方法 参数:NSSize结构体 返回NSValue类型
valueWithRect方法 NSValue类方法 参数:NSRect结构体 返回NSValue类型
从NSValue对象取出前包装的结构体
pointValue方法 NSValue对象方法 无参 返回NSPoint类型
sizeValue方法 NSValue对象方法 无参 返回NSSize类型
rectValue方法 NSValue对象方法 无参 返回NSRect类型
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { @autoreleasepool { NSRect re =NSMakeRect(2, 2, 5, 5); NSValue *val = [NSValue valueWithRect:re]; NSLog(@"%@",val); NSRect re1 = [val rectValue]; NSLog(@"%.2f,%.2f,%.2f,%.2f",re1.origin.x,re1.origin.y,re1.size.width,re1.size.height); } return 0;}
*不能直接将NSPoint类型的数据放在数组中
三、NSDate的使用
1、NSDate介绍
NSDate可以用来表示时间,可进行一些常见的日期和时间的处理
[NSDate date]; 可以返回当前时间,但是零时区的时间 *北京为东8区,就是当前时间+8小时
2、日期格式化
创建时间对象
NSDateForMatter *formatter = [NSDateFormatter new];设置日期的现实格式
formatter.dateFormat = @"yyyy-MM-DD HH:mm:ss";* yyyy四位表示年份、MM两位表示月份、DD二位表示天数、HH两位表示小时(24小时制)、hh二位表示小时(12小时制)、mm两位表示分钟数、ss二位表示秒
将符合格式的字符串转化为NSDate
NSDate *date = [formatter dateFromString:@"2016-1-30"];
3、常用方法
明日此刻:
NSTimeInterval secondsPerDay = 24*60*60; //一天的秒数NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:secondsPerDay];NSLog(@"myDate = %@",tomorrow);
昨日此刻
NSTimeInterval secondsPerDay1 = 24*60*60;NSDate *now = [NSDate date];NSDate *yesterDay = [now addTimeInterval:-secondsPerDay];NSLog(@"yesterDay = %@",yesterDay);
创建日期对象:
NSCalendar *ca = [NSCalendar currentCalendar];
获得时间组件:components:fromDate方法 NSCalendar对象方法 参数:要输出时间类型+NSDate类型对象 返回NSDateComponents类型
参数时间类型: NSCalendarUnitYear=>年 NSCalendarUnitMonth=>月 NSCalendarUnitDay=>日
NSCalendarUnitHour=>时 NSCalendarUnitMinute=>分 NSCalendarUnitSecond=>秒 *时间类型参数为枚举类型,中间用"|"
计算距今的时长:dateWithTimeIntervalSinceNow方法 NSDate对象方法 参数:总秒数(NSTimeInterval类型) 返回Id类型
0 0
- 【黑马程序员】Foundation框架(四)
- 黑马程序员------[Foundation]Foundation框架
- 黑马程序员-Foundation框架
- 黑马程序员-----Foundation框架
- 黑马程序员---Foundation框架
- 黑马程序员 Foundation框架
- 黑马程序员---Foundation框架
- 【黑马程序员】-Foundation框架
- 黑马程序员--Foundation框架
- 黑马程序员-----Foundation框架续(一)
- 黑马程序员-----Foundation框架续(二)
- 黑马程序员-10Foundation框架(下)
- 黑马程序员 Foundation框架(续)
- 【黑马程序员】Foundation框架(一)
- 【黑马程序员】Foundation框架(二)
- 【黑马程序员】Foundation框架(三)
- 黑马程序员-Foundation框架-NSArray
- 黑马程序员-Foundation框架-NSDictionary
- 【BLE】CC2541之硬件IIC(TMP102温度传感器)
- bfprt算法求最小的k个数
- LeetCode 155 Min Stack(最小栈)
- Qt中文件类型过滤器
- NavigationController的视图,滑动手势返回
- 【黑马程序员】Foundation框架(四)
- 汇编除法运算
- Environment variable
- MySql触发器
- Java SE,Java EE ,Java ME 区别
- 【Android】startActivityForResult与startActivity
- 匿名对象
- hdu 2200 Eddy's AC难题
- hdu 2563(递推)