【黑马程序员】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
原创粉丝点击