框架:由许多类,方法,函数和文档按照一定逻辑组织起来的集合

来源:互联网 发布:mac电量消耗变快 编辑:程序博客网 时间:2024/05/16 18:40
 194人阅读 评论(0) 收藏 举报

框架:由许多类,方法,函数和文档按照一定逻辑组织起来的集合

不小心修改了系统的文件,引起的错误

计算机生成了可选文字:* 用 父 类 还 是 id 〈 协 议 > 不 使 用 父 类 的 原 因 : 如 果 抽 象 一 个 父 类 的 话 , 还 是 有 局 限 性 , 因 为 很 多 时 候 , 不 同 类 是 无 法 抽 象 出 共 同 的 父 类 的 · 有 时 候 , 某 个 类 己 经 继 承 了 其 他 类 , 这 里 不 能 再 继 承 类 了 ( 因 为 不 支 持 多 鰷 承 )

[cpp] view plain copy
  1. #import<Foundation/Foundation.h>  
  2.    
  3. int main(intargc,const char* argv[]) {  
  4.     @autoreleasepool {  
  5.         
  6.     NSString *str1 = @"abc";  
  7.     NSString *str2 = @"Abc";  
  8.     NSString *str4 = @"Abc";  
  9.     NSString *str3 = [NSString stringWithFormat:@"abc"];  
  10.     //str3在堆区,而str1,str2在常量区  
  11.     //所以 ==不能判断字符串是否相等  
  12.          
  13.         //不是类变量前不用加 *  
  14.         //NSComparisonResult 是一个枚举类型  
  15.         //compare 默认区分大小写  
  16.         //NSComparisonResultresult  =[str1 compare:str2 ];  
  17.         //如果要区分大小写  
  18.          NSComparisonResultresult  =[str1 compare:str2options:NSCaseInsensitiveSearch|NSNumericSearch];  
  19.        switch (result) {  
  20.             case NSOrderedAscending:  
  21.               NSLog(@"str1 < str2升序");  
  22.                break;  
  23.             case NSOrderedDescending:  
  24.               NSLog(@"str1 > str2降序");  
  25.                break;  
  26.            case NSOrderedSame:  
  27.               NSLog(@"str1 == str2相等");  
  28.                break;  
  29.                  
  30.            default:  
  31.                break;  
  32.        }  
  33.          
  34.         //常量字符串,在常量区只有一份,地址一定是一样的  
  35.        if(str2 == str4){  
  36.           NSLog(@"相等");  
  37.        }  
  38.        else{  
  39.           NSLog(@"不相等");  
  40.        }  
  41.          
  42.          
  43.         //isEqualToString区分大小写的  
  44.          
  45.        if( [str2 isEqualToString:str4]){  
  46.           NSLog(@"相等");  
  47.        }  
  48.        else{  
  49.           NSLog(@"不相等");  
  50.        }  
  51.     }  
  52.     return 0;  
  53. }  

位枚举

常用的三个函数

计算机生成了可选文字:NSCaseInsensitiveSearch : 不 区 分 大 小 写 字 符 , NSLiteralSearch: 行 完 全 比 较 , 区 分 大 小 写 , ( 默 认 ) № mericSearch: 比 较 字 符 串 的 字 符 个 数 , 而 不 是 字 符 值 ·

计算机生成了可选文字:typedef NS_OPTIONS (NSUInteger, NSStringCompareOptions) NSCaseInsensitiveSearch NSLitera ISea rch equivalence NSBackwardsSearch 4, NSAncho red Sea rch 1, Exact character—by—character Search from end of source string Search is limited to start (or end, if NSBackwardsSearch) of source string NSNumericSea rch Added in 1ø.2; Numbers within strings 64, are compared using numeric value, that is, F002.txt F007. txt F0025. txt; only applies to compare methods, not find NSDiacritic1nsensitiveSearch 2_Ø) If 128, specified, ignores diacritics (o—umlaut o) NSWidth1nsensitiveSearch 2_Ø) If 256, specified, ignores width differences ( 'a' UFF41) NSForcedOrderingSearch 2_Ø) 512, If specified, comparisons are forced to return either NSOrderedAscending or NSOrderedDescending if the strings are equivalent but not strictly equal, for stability when sorting (e g "aaa" "AAA" with NSCaseInsensitiveSearch specified) NSRegu1arExpressionSearch 3_2) - 1Ø24 Applies to rangeOfString:... , stringByReplacingOccurrencesOfString: , and replaceOccurrencesOfString: ... methods only; the treated as an ICU—compatible regular expression; ootions can aoolv exceot NSCaseInsensitiveSearch search string is if set, no other and

[cpp] view plain copy
  1. #import<Foundation/Foundation.h>  
  2. //检测字符串的前缀和后缀  
  3. void qianzhuihouzhui( )  
  4. {  
  5.     NSString *url = @"http://www.baidu.com";  
  6.       
  7.     if ([url hasPrefix:@"https://"]|[urlhasPrefix:@"http://"]){  
  8.         NSLog(@"http或者https协议网站");  
  9.     }  
  10.     else  
  11.     {  
  12.         NSLog(@"不是一个http协议网址");  
  13.     }  
  14.       
  15.       
  16.     if( [url hasSuffix:@".com"]){  
  17.         NSLog(@".com结尾网站");  
  18.     }  
  19.     else{  
  20.         NSLog(@"不是.com结尾网站");  
  21.     }  
  22.       
  23.    
  24. }  
  25. int main(intargc,const char* argv[]) {  
  26.     @autoreleasepool {  
  27.        
  28.          
  29.         //字符串的查找某个字符串在另一个字符串首次出现的位置  
  30.         NSString*str1 =@"sdsaiosaaaiosbbbb";//字符串中有两个ios  
  31.        NSString *str2 = @"ioss";  
  32.          
  33.        NSRange range = [str1 rangeOfString:str2];  
  34.          
  35.         //range.length 字符串的长度  
  36.         //range.location 字符串首次出现的位置如果查找不到会返回一个特别大的数字  
  37.        if (range.location!=NSNotFound) {  
  38.            NSLog(@"%lu,%lu",range.length,range.location);  
  39.    
  40.        }  
  41.        else{  
  42.           NSLog(@"没有在%@中查找到%@",str1,str2);  
  43.        }  
  44.                  
  45.          
  46.     }  
  47.          return 0;  
  48. }  


NSRange是一个结构体变量

[cpp] view plain copy
  1. #import<Foundation/Foundation.h>  
  2.    
  3. int main(intargc,const char* argv[]) {  
  4.     @autoreleasepool {  
  5.        NSRange range ;//结构体变量  
  6.        NSRange *r ;//结构体指针  
  7.          
  8.         //第一种赋值方法  
  9.        range.location = 3 ;  
  10.        range.length = 3 ;  
  11.          
  12.         //结构体整体变量赋值  
  13.        range = (NSRange){3,3};  
  14.          
  15.        //3)  
  16.        NSRange r3 = {.location = 3};//此时length没有赋初始值  
  17.          
  18.         //4) oc新增  
  19.        NSRange r4 = NSMakeRange(3,3);  
  20.         //loca, len  
  21.          
  22.          
  23.         //查看结构体变量值  
  24.        NSLog(@"%ld,%ld",r4.location,r4.length);  
  25.          
  26.          
  27.          
  28.         NSString *str =  NSStringFromRange(r4);  
  29.        NSLog(@"%@",str);  
  30.        //{3, 3}  
  31.    
  32.        r->length = 3;  
  33.        r->location = 3;  
  34.         //NSLog(@"%ld,%ld",r->location,r->length);  
  35.   
  36.       
  37.     }  
  38.     return 0;  
  39. }  
  40.    
  41.    
  42. //  
  43. // main.m  
  44. //  NSString字符串的截取  
  45. //  
  46. // Created by CHINGWEI_MACPC on 15/12/16.  
  47. //  Copyright © 2015年 itcast. All rights reserved.  
  48. //  
  49.    
  50. #import<Foundation/Foundation.h>  
  51. void test(){  
  52.     NSString *url = @"http://www.baidu.com";  
  53.       
  54.     NSString *url1  = [url substringFromIndex:5];  
  55.     NSLog(@"url1 =%@",url1);  
  56.     //  //www.baidu.com  
  57.       
  58.     NSString *str2 = [url substringToIndex:5];  
  59.     NSLog(@"str2 =%@",str2);  
  60.     //http:  
  61.       
  62.     NSRange r1 = {7,13};  
  63.     NSString *str3 = [url substringWithRange:r1];  
  64.     NSLog(@"str3 =%@",str3);  
  65.     //www.baidu.com  
  66. }  
  67. void test2()  
  68. {  
  69.     NSString *str =@"<itcast>黑马程序员</itcast>";  
  70.     NSUInteger loc  = [str rangeOfString:@">"].location +1 ;  
  71.     NSUInteger len = [str rangeOfString:@"</"].location - loc ;  
  72.       
  73.     NSRange r2 = {loc,len};  
  74.       
  75.     NSString *subStr = [str substringWithRange:r2];  
  76.     NSLog(@"%@",subStr);  
  77. }  
  78. int main(intargc,const char* argv[]) {  
  79.     @autoreleasepool {  
  80.        
  81.        //字符串替换  
  82.         NSString *str = @"dsdsaaasds aasd saaa ";  
  83.         NSString *str2 = [str stringByReplacingOccurrencesOfString:@"a"withString:@"*"];  
  84.        NSLog(@"替换后的字符串为:%@",str2);  
  85.        NSRange r2 = {0,1};  
  86.         NSString *str3 = [str stringByReplacingCharactersInRange:r2withString:@""];  
  87.        NSUInteger len = [str3 length];  
  88.        NSRange r3 = {len-1,1};  
  89.         str3 = [str3 stringByReplacingCharactersInRange:r3 withString:@""];  
  90.         NSLog(@"str3去掉空格后为 \"%@\"",str3);  
  91.         //替换后的字符串为:dsds***sds**sds***  
  92.    
  93.    
  94.  NSString *s1 =@"dsdsaaasds aasd saaa ";  
  95.         str3 = [s1 stringByTrimmingCharactersInSet:[NSCharacterSetwhitespaceCharacterSet]];  
  96.         NSLog(@"老师方法去掉收尾空格后 \"%@\"",str3);  
  97.    
  98.     }  
  99.     return 0;  
  100. }  
  101.    
  102. void test(){  
  103.     NSString *str1 = @"150";  
  104.     NSString *str2 = @"100";  
  105.       
  106.       
  107.     //强制类型转换  
  108.       
  109.     int num1 = [str1 intValue];  
  110.     int num2 = [str2 intValue];  
  111.       
  112.     int minus = num1 - num2 ;  
  113.       
  114. }  
  115. int main(intargc,const char* argv[]) {  
  116.     @autoreleasepool {  
  117.     //oc和 c语言字符串互换  
  118.    
  119.     //1)c -->oc 对象  
  120.     char *s = "zs";  
  121.     NSString *str = [NSString stringWithUTF8String:s];  
  122.        NSLog(@"%@",str);  
  123.          
  124.         //2oc--->c  
  125.        NSString *str2 = @"zbz";  
  126.         ///Users/chingwei_macpc/Documents/Foundation框架/字符串和其他数据类型转换/main.m:34:17:Initializing 'char *' with an expression of type 'const char * _Nullable'discards qualifiers  
  127.        const  char*s1 = [str2 UTF8String] ;  
  128.        printf("%s\n",s1);  
  129.          
  130.          
  131.          
  132.     }  
  133.     return 0;  
  134. }  

计算机生成了可选文字:NSMutab1eString 类 *XNSString 类 , 那 么 NSString 提 供 的 方 法 在 、 S № tableString 中 基 本 都 可 以 使 用 , NSMutableString 好 比 一 个 字 符 率链袤, 它 可 以 任 意 的 动 态 在 字 符 率 中 添 加 字 符 率 除 字 符 率 指 定 位 置 插 入 字 符 率 , 使 用 它 来 操 作 字 符 率 会 更 加 灵 活 , NSMutableString 和 NSString 的 区 别 Stri 是 不 可 变 的 , 里 面 的 文 字 内 容 是 不 能 进 行 彆 改 的 NSMutableString 是 可 变 的 , 里 面 的 文 字 内 容 可 以 时 更 改 NSMutableString 能 使 用 NSString 的 所 有 方 法

 

计算机生成了可选文字:不 可 变 : 指 的 是 字 符 率 在 内 存 中 占 用 的 存 储 空 何 固 定 , 并 且 存 储 的 内 容 不 能 发 生 变 化 可 变 : 指 的 是 字 符 率 在 内 存 中 占 用 的 存 储 空 间 可 以 不 固 定 , 并 且 存 储 的 内 容 可 以 被 彆 改

[cpp] view plain copy
  1. #import<Foundation/Foundation.h>  
  2.    
  3. int main(intargc,const char* argv[]) {  
  4.     @autoreleasepool {  
  5.         //int a a 是存在栈区  
  6.         NSString*str2=@"jack";//NSString 是在常量区不可变  
  7.        NSLog(@"str2=%p",str2 );  
  8.         //str2=0x100001048  
  9.         str2=@"rose";//NSString 是在常量区不可变  
  10.         NSLog(@"str2=%p",str2 );  
  11.         //str2=0x100001088  
  12.         //同一个变量地址不一样常量一样就存在一个内存区  
  13.         //字符串所占的空间和字符串都不能改变  
  14.          
  15.          
  16.         //[NSMutableString stringWithFormat:@"jack"]存入堆区  
  17.         //字符串在内存占用的空间是不固定,并且存储内容可以被修改  
  18.         NSMutableString *str1 = [NSMutableStringstringWithFormat:@"jack"];  
  19.          
  20.        NSLog(@"str1=%p",str1);  
  21.         //str1=0x100204290  
  22.          
  23.        [str1 appendFormat:@"rose"];//格式化添加         
  24.         NSLog(@"%@=%p",str1,str1);  
  25.         //str1=0x100204290  
  26.          
  27.          
  28.         NSMutableString *s2 =[NSMutableString string];  
  29.        NSString *s3=@"itcast";  
  30.        for (inti = 0; i<10; i++) {  
  31.            [s2 appendString:s3];  
  32.        }  
  33.        NSLog(@"%@",s2);  
  34.          
  35.          
  36.     }  
  37.     return 0;  
  38. }  
  39.    
  40.    
  41.    
  42. #import<Foundation/Foundation.h>  
  43.    
  44. int main(intargc,const char* argv[]) {  
  45.     @autoreleasepool {  
  46.       
  47.         //append格式化添加字符串  
  48.         NSMutableString *str = [NSMutableStringstring];  
  49.         [str appendFormat:@"http://www.baidu.com"];  
  50.        NSLog(@"%@",str);  
  51.       
  52.         //因为是可变的不需要void返回值  
  53.          
  54.         //删除字符串的某一个范围  
  55.         [str deleteCharactersInRange:NSMakeRange(5, 2)];  
  56.        NSLog(@"%@",str);  
  57.         //http:www.baidu.com  
  58.          
  59.         //插入一个字符串  
  60.        [str insertString:@"\\\\" atIndex:5];  
  61.        NSLog(@"%@",str);  
  62.          
  63.         //替换字符串的一部分内容  
  64.         [str replaceCharactersInRange:NSMakeRange(11, 5)withString:@"itcast"];  
  65.        NSLog(@"%@",str);  
  66.         //http:\\www.itcast.com  
  67.          
  68.          
  69.        //易犯错误  
  70.         //1)@"sd"是NSString  
  71.        NSMutableString *test = @"sd";  
  72.         ///Users/chingwei_macpc/Documents/Foundation框架/NSMutableString常用方法/main.m:37:26: Incompatible pointertypes initializing 'NSMutableString *' with an expression of type 'NSString *'  
  73.        NSLog(@"%@",test);  
  74.        //[test appendFormat:@"asd"];  
  75.         //给常量值赋值报错  
  76.         
  77.        //2).  
  78.         NSMutableString *test1 =[NSMutableStringstring];  
  79.        str.string =@"";//用空覆盖  
  80.        [str appendFormat:@"xxxxxx"];  
  81.        NSLog(@"%@",test1);  
  82.        //输出为空  
  83.          
  84.          
  85.         //3).到底用NSMutableString还是NSString  
  86.         //特殊处理的时候字符串拼接,替换等才用到NSMUtableString  
  87.       
  88.     }  
  89.     return 0;  
  90. }  

位枚举

计算机生成了可选文字:4) Mfr. typedef (NSUInteger, NSStringCompareOpti NSCaseInsensitiveSearch NSLiteraISearch 2, NSBackwardsSearch 4, NSAnchoredSearch Exact character * earch from end Search is limit NS3ackwa rdssearch) Of source string NSNumericSearch 64, Added in 1Ø.2; compared using numeric value, that is, Foo only applies to compare methods, not find NSDiacriticInsensitiveSearch NS_ENUM_AVAILABLE specified, ignores diacritics (o—umlaut — NSString g" " " options:0 5) J' NSRange range (sl range0fString:@ o if (range. location NSNotFound) ( range, location, range, length) , ) else ( NSLog length

 

NSArray

OC中数组类,C语言只能存放一种类型数据,不能很方便的动态添加数组元素,不能方便动态的删除数组元素(长度固定)

NSArray只能存放任意oc对象,并且顺序的,不能存储非oc对象

比如int/float/double/char/enum/struct

一旦初始化完毕,它里面的内容永远固定的

[cpp] view plain copy
  1.    
  2. #import<Foundation/Foundation.h>  
  3.    
  4. int main(intargc,const char* argv[]) {  
  5.     @autoreleasepool {  
  6.         
  7.          
  8.         //创建一个空数组  
  9.        NSArray *arr1 =[NSArray array];  
  10.          
  11.          
  12.         //创建一个数组,只有元素;  
  13.         NSArray * arr2 =[NSArray arrayWithObject:@"1"];  
  14.          
  15.         //创建数组,有多个元素常见写法  
  16.         NSArray *arr3 = [NSArray arrayWithObjects:@"1",@"2",@"3",@4,nil];  
  17.          
  18.         //调用对象方法创建数组 nil表示赋值结束,但不存储nil  
  19.         NSArray *arr4 = [[NSArray alloc] initWithObjects:@"1",[NSNullnull],@"2",@"3",nil];  
  20.          
  21.         //用一个数组可以创建另外一个数组  
  22.         NSArray *arr5 = [NSArray arrayWithArray:arr3];  
  23.          
  24.     }  
  25.     return 0;  
  26. }  

NSArray常见用法

[cpp] view plain copy
  1. void test(){  
  2.     NSArray *arr =[NSArray arrayWithObjects:@"1",@"2",@"3",nil];  
  3.       
  4.     //获得数组长度  
  5.     NSLog(@"%ld",arr.count);//3  
  6.       
  7.     //获取下标对应的对象  
  8.     NSLog(@"%@",[arr objectAtIndex:2]);  
  9.       
  10.     //返回元素下标  
  11.     NSUInteger loc = [arr indexOfObject:@"2"];  
  12.     NSLog(@"%ld",loc);  
  13.       
  14.     //数组中是否包含了此元素  
  15.     if ([arr containsObject:@"2"]) {  
  16.         NSLog(@"包含元素@\"2\"");  
  17.     }  
  18.     else  
  19.     {  
  20.        NSLog(@"不包含");  
  21.     }  
  22. }  
  23. int main(intargc,const char* argv[]) {  
  24.     @autoreleasepool {  
  25.         //简化的方式定义数组  
  26.        NSArray *arr =@[@"1",@"2",@"3",@4,@"One"];  
  27.          
  28.        NSString *st1 = arr[1];  
  29.        NSLog(@"%@",st1);  
  30.          
  31.     }  
  32.     return 0;  
  33. }  

数组遍历

[cpp] view plain copy
  1. #import<Foundation/Foundation.h>  
  2.    
  3. int main(intargc,const char* argv[]) {  
  4.     @autoreleasepool {  
  5.        NSArray *arr =@[@"1st",@"2nd",@"3rd",@4,@"5th"];  
  6.          
  7.         //遍历1通过下标访问  
  8.        for (inti = 0 ; i < arr.count;  i ++) {  
  9.            NSLog(@"arr[%d] -> %@",i,arr[i]);  
  10.        }  
  11.          
  12.          
  13.         //遍历2快速枚举法 for循环增强形式  
  14.        int i = 0 ;  
  15.        for (NSString* str in arr) {  
  16.              
  17.             NSLog(@"arr[%d] --> %@",i,str);  
  18.            i++;  
  19.        }  
  20.          
  21.         //遍历3 block  
  22.          
  23.        [arr enumerateObjectsUsingBlock:^(id  _Nonnullobj, NSUInteger idx, BOOL * _Nonnull stop) {  
  24.            if(idx == 2)  
  25.            {  
  26.                *stop =YES;//停止类似break;  
  27.                  
  28.            }  
  29.            else{  
  30.            NSLog(@"idx = %ld ,obj = %@",idx,obj);  
  31.            }  
  32.              
  33.        }];  
  34.     }  
  35.     return 0;  
  36. }  


NSArray读写文件

计算机生成了可选文字:iosxxx.plist No Selection Type A rray string string String Number string iosxxx.plist Value (5 items) Root Item O Item I Item 2 Item 3 Item 4

[cpp] view plain copy
  1. #import<Foundation/Foundation.h>  
  2.    
  3. int main(intargc,const char* argv[]) {  
  4.     @autoreleasepool {  
  5.          
  6.        NSArray *arr =@[@"1st",@"2nd",@"3rd",@4,@"5th"];  
  7.          
  8.         //将NSArray写入到文件中  
  9.          
  10.         BOOL isWrite = [arr writeToFile:@"/Users/chingwei_macpc/Desktop/iosxxx.plist"atomically:YES];  
  11.          
  12.        if (isWrite) {  
  13.           NSLog(@"写入成功");  
  14.        }  
  15.        else  
  16.        {  
  17.           NSLog(@"写入失败");  
  18.        }  
  19.  NSArray *readArr = [NSArrayarrayWithContentsOfFile:@"/Users/chingwei_macpc/Desktop/iosxxx.plist"];  
  20.        NSLog(@"readArr= %@",readArr);  
  21.    
  22.          
  23.     }  
  24.     return 0;  
  25. }  
计算机生成了可选文字:2ø15-12-16 readArr - ( 2nd, Program ended with exit code: ø

NSArray和字符串

[cpp] view plain copy
  1. #import<Foundation/Foundation.h>  
  2.    
  3. int main(intargc,const char* argv[]) {  
  4.     @autoreleasepool {  
  5.         
  6.          
  7.         NSArray *arr =@[@"1st",@"2nd",@"3rd",@"4th"];  
  8.          
  9.         NSString *str = [arr componentsJoinedByString:@"-"];  
  10.        NSLog(@"%@",str);  
  11.          
  12.         NSString *str2 = @"400-233-8900#400-233-3333";  
  13.         //先分割#再分成两部电话  
  14.         arr = [str2 componentsSeparatedByString:@"-"];  
  15.        NSLog(@"%@",[arrfirstObject]);  
  16.        NSLog(@"%@",[arrlastObject]);  
  17.        NSLog(@"%@",arr[1]);  
  18.          
  19.     }  
  20.     return 0;  
  21. }  

NSMutableArray基本应用

[cpp] view plain copy
  1. #import<Foundation/Foundation.h>  
  2.    
  3. int main(intargc,const char* argv[]) {  
  4.     @autoreleasepool {  
  5.        //空数组  
  6.         NSMutableArray *arr1 = [NSMutableArray array];  
  7.         //创建一个初始化多个元素  
  8.         NSMutableArray *arr2 =[NSMutableArray arrayWithObjects:@"1st", @"2nd",@"3rd",@"4th",nil];  
  9.          
  10.         //默认创建一个长度为5,也可以再继续扩充长度  
  11.         NSMutableArray *arr3 = [NSMutableArray arrayWithCapacity:5];  
  12.          
  13.        //添加元素  
  14.        [arr1 addObject:@"a1"];  
  15.        [arr1 addObject:@"a2"];  
  16.          
  17.        [arr2 insertObject:@"5th" atIndex:4];  
  18.        NSLog(@"%@",arr2);  
  19.          
  20.        //删除元素  
  21.        [arr2 removeObject:@"5th"];  
  22.        NSLog(@"%@",arr2);  
  23.          
  24.         [arr2 removeObjectAtIndex:3];  
  25.        NSLog(@"%@",arr2);  
  26.          
  27.        //替换元素  
  28.         [arr2 replaceObjectAtIndex:2 withObject:@"3three"];  
  29.        NSLog(@"%@",arr2);  
  30.          
  31.        //查找元素  
  32.        BOOL isSerach = [arr2 containsObject:@"2nd"];  
  33.        NSLog(@"%d",isSerach);  
  34.          
  35.        //交换元素  
  36.         [arr2 exchangeObjectAtIndex:0 withObjectAtIndex:2];  
  37.        NSLog(@"%@",arr2);  
  38.    
  39.     }  
  40.     return 0;  
  41. }  


字典的遍历

[cpp] view plain copy
  1. #import<Foundation/Foundation.h>  
  2.    
  3. int main(intargc,const char* argv[]) {  
  4.     @autoreleasepool {  
  5.        //创建一个空字典  
  6.         NSDictionary *dict1 = [NSDictionary dictionary];  
  7.          
  8.          
  9.         //创建只有一组键值对的字典  
  10.         NSDictionary*dict2 = [NSDictionarydictionaryWithObject:@"张三"forKey:@"zs"];  
  11.        NSLog(@"%@",dict2);  
  12.         //   zs = "\U5f20\U4e09";  
  13.    
  14.         //创建多组键值对的字典 key和value都必须是对象  
  15.         NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"k1",@"value2",@"k2",nil];  
  16.          
  17.        NSLog(@"%@",dict3);  
  18.          
  19.          
  20.         //快速创建一个字典键值不能重复,如果有重复也是显示最后一个键值  
  21.         NSDictionary *ditc4 = @{@"k1":@"value1",@"k2":@"value2",@"k3":@"value3"};  
  22.        NSLog(@"%@",ditc4);  
  23.          
  24.          
  25.         //打印字典的长度  
  26.        NSLog(@"%ld",ditc4.count);  
  27.          
  28.          
  29.         //根据key值取出value值  
  30.        NSString *str = [ditc4 objectForKey:@"k1"];  
  31.        NSLog(@"%@",str);  
  32.          
  33.          
  34.         //字典的遍历问题  
  35.         //第一步:获取所有的key  
  36.         //第二步:根据key获取value  
  37.        for(NSString*key in ditc4){  
  38.            NSString *value =[ditc4 objectForKey:key];  
  39.            NSLog(@"key= %@ ,value =%@",key,value);  
  40.        }  
  41.          
  42.        [ditc4 enumerateKeysAndObjectsUsingBlock:^(id  key,idobj, BOOL * stop) {  
  43.            {  
  44.                NSLog(@"key = %@ , value = %@",key,obj);  
  45.            }  
  46.        }];  
  47.          
  48.     }  
  49.     return 0;  
  50. }  


NSString类介绍基本使用

计算机生成了可选文字:NSLog (@'str NSLog (@'str3 z ,str); 313216:12720431 str - ox100001038 113216:12720431 str3 - ox100001038

计算机生成了可选文字:

[cpp] view plain copy
  1. #import<Foundation/Foundation.h>  
  2. void test(){  
  3.     //1.@""常量字符串  
  4.     //atomically//原子性在写入的过程中别人是否能读  
  5.     //NSUTF8StringEncodingxcode默认的文字编码格式  
  6.    NSString *str =@"zhangsan李四";  
  7.    NSError *err  ;//错误对象  
  8.     [str writeToFile:@"/Users/chingwei_macpc/desktop/1.txt"atomically:YESencoding:NSUTF8StringEncodingerror:&err];//error需要二级指针s  
  9.       
  10.     if (err!=nil) {  
  11.        NSLog(@"写入失败!%@",err);  
  12.          
  13.     }  
  14.       
  15.     else{  
  16.        NSLog(@"写入成功");  
  17.     }  
  18. }  
  19. int main(intargc,const char* argv[]) {  
  20.     @autoreleasepool {  
  21.        test();  
  22.        NSError *err  ;//错误对象  
  23.           NSString *str = [NSString stringWithContentsOfFile:@"/Users/chingwei_macpc/desktop/1.txt"encoding:NSUTF8StringEncodingerror:&err] ;  
  24.        if (err!=nil){  
  25.           NSLog(@"读取失败!%@",err);  
  26.        }  
  27.        else{  
  28.           NSLog(@"读取成功 %@",str);  
  29.        }  
  30.    
  31.          
  32.          
  33.     }  
  34.     return 0;  
  35. }  


NSDictionary快捷使用方式

[cpp] view plain copy
  1. #import<Foundation/Foundation.h>  
  2. void test(){  
  3.     NSDictionary *dict4 = @{@"k1":@"value1",@"k2":@"value2",@"k3":@"value3"};  
  4.       
  5.       
  6.     //简写形式获取key对应的value  
  7.       
  8.     NSLog(@"%@",dict4[@"k1"]);  
  9.       
  10.       
  11.     //把字典保存到文件中  
  12.     BOOL isWrite = [dict4  writeToFile:@"/users/chingwei_macpc/desktop/p.plist"atomically:YES];  
  13.     NSLog(@"%d",isWrite);  
  14.       
  15.     NSDictionary *nsd = [NSDictionary dictionaryWithContentsOfFile:@"/users/chingwei_macpc/desktop/p.plist"];  
  16.     NSLog(@"%@",nsd);  
  17. }  
  18.    
  19. int main(intargc,const char* argv[]) {  
  20.     @autoreleasepool {  
  21.        668993  
  22.  *ln = [NSArrayarrayWithObjects:@"大连",@"沈阳",nil];  
  23.         NSArray *hb =[NSArrayarrayWithObjects:@"保定",@"石家庄",nil];  
  24.          
  25.         NSDictionary *dct = [NSDictionary dictionaryWithObjectsAndKeys:ln,@"ln",hb,@"hb",nil ];  
  26.          
  27.          
  28.        NSLog(@"%@",dct);  
  29.         [dct writeToFile:@"/users/chingwei_macpc/desktop/p1.plist"atomically:YES];  
  30.          
  31.         NSDictionary *dct1 = [NSDictionary dictionaryWithContentsOfFile:@"/users/chingwei_macpc/desktop/p1.plist" ];  
  32.    
  33.        [dct1 enumerateKeysAndObjectsUsingBlock:^(id   key,id  obj, BOOL *stop) {  
  34.             
  35.            for (NSString *str inobj  ) {  
  36.                NSLog(@"city =%@ ",str);  
  37.                  
  38.            }  
  39.        }];  
  40.          
  41.          
  42.        //获取每个数组  
  43.        NSArray * arr =  dct1[@"ln"];  
  44.        NSLog(@"%@",arr);  
  45.        /*( 
  46.        "\U5927\U8fde", 
  47.        "\U6c88\U9633" 
  48.        )*/  
  49.        NSLog(@"%@",[arrlastObject]);//沈阳  
  50.          
  51.          
  52.     }  
  53.     return 0;  
  54. }  

罗永浩用演讲赚来的钱捐给了https这个组织

NSURL其实就是我们在浏览器上看到的网站地址,这不就是一个字符串么,为什么还要在写一个NSURL呢,主要是因为网站地址的字符串都比较复杂,包括很多请求参数,这样在请求过程中需要解析出来每个部门,所以封装一个NSURL,操作很方便:

 


fileURLWithPath通过本地路径创建url文件路径

Url可以是网络路径,本地路径,其他的协议,sms,tel,https,ftp

[cpp] view plain copy
  1. #import<Foundation/Foundation.h>  
  2.    
  3. int main(intargc,const char* argv[]) {  
  4.     @autoreleasepool {  
  5.        NSString *str = @"$10000000";  
  6.         NSURL *url = [NSURL URLWithString:@"file:///Users/chingwei_macpc/Desktop/3.txt"];  
  7.         NSURL *url2 = [NSURL fileURLWithPath:@"sms://10086"];  
  8.         NSURL *url3 = [NSURL fileURLWithPath:@"tel://10086"];  
  9.         NSURL *url4 = [NSURL URLWithString:@"/Users/chingwei_macpc/Desktop/4.txt"];  
  10.         if([str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil])  
  11.        {  
  12.           NSLog(@"写入成功");  
  13.        }  
  14.         if([str writeToURL:url4 atomically:YES encoding:NSUTF8StringEncoding error:nil])  
  15.        {  
  16.           NSLog(@"2写入成功");  
  17.        }  
  18.          
  19.          
  20.         NSString *str2 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncodingerror:nil];  
  21.        NSLog(@"str2= %@",str2);  
  22.          
  23.     }  
  24.     return 0;  
  25. }  

计算机生成了可选文字:(NSString * ) uppercaseString; 全 部 字 符 转 为 大 写 字 母 (NSString * ) lowercaseString 全 部 字 符 转 为 小 写 字 母 (NSString * ) c 首 字 母 变 大 写 , 其 他 字 母 都 变 小 写 , 如 果 一 个 句 子 中 有 多 个 单 词 , 那 么 会 将 每 个 单 词 的 首 字 母 变 成 大 写 , 会 字 母 变 成 小 写 (BOOL)isEqualToString:(NSString *)astring; 两 个 字 符 串 的 内 容 相 同 就 返 回 YES , 否 则 返 回 NO 注 意 : = = 比 较 的 是 两 个 对 象 的 地 址 是 否 相 同 , 不 是 字 符 串 内 容 (NSComparisonResult)compare:(NSString *)string, 这 个 方 法 可 以 用 来 比 较 两 个 字 符 串 内 容 的 大 小 比 较 方 法 : 逐 个 字 符 地 进 行 比 较 RSCII 值 , 返 回 NSComparisonResu1t 作 为 比 较 结 果

 


NSFileManager介绍和用法

[cpp] view plain copy
  1. //判断文件是否存在  
  2.         NSString *filePath = @"/Users/chingwei_macpc/Desktop/3.txt";  
  3.          
  4.         NSString *filePath2 = @"/Users/chingwei_macpc/Desktop";  
  5.          
  6.        NSString *filePath3 = @"/";  
  7.         //调用defaultmanager创建一个文件管理单例对象  
  8.         //单利对象,程序运行期间,只有一个对象存在  
  9.         NSFileManager *fm = [NSFileManager defaultManager];  
  10.          
  11.        BOOL isExist= [fm fileExistsAtPath:filePath];  
  12.        NSLog(@"--->%d",isExist);  
  13.          
  14.         //判断是否在同一目录  
  15.          
  16.        if(isExist){  
  17.            BOOL *isDir ;  
  18.           [fm fileExistsAtPath:filePath2isDirectory:isDir];  
  19.            if (isDir) {  
  20.               NSLog(@"这是一个目录");  
  21.                  
  22.            }  
  23.            else{  
  24.               NSLog(@"这不是一个目录");  
  25.            }  
  26.        }  
  27.          
  28.          
  29.        //判断是否写  
  30.          
  31.        BOOL isYes = [fm isWritableFileAtPath:filePath3];  
  32.        NSLog(@"是否可写--->%d",isYes);  
  33.          
  34.        //是否可读  
  35.        isYes = [ fm isReadableFileAtPath:filePath3];  
  36.        NSLog(@"是否可读--->%d",isYes);  
  37.        //是否可删除  
  38.          
  39.        isYes = [fm isDeletableFileAtPath:filePath3];  
  40.        NSLog(@"是否可删除--->%d",isYes);  
  41.     }  
  42.     return 0;  
  43. }  
  44.    

NSFileManager 获取文件属性和信息

[cpp] view plain copy
  1. NSFileManager *fm = [NSFileManager defaultManager];  
  2.          
  3.         NSString *filePath = @"/Users/chingwei_macpc/Desktop/3.txt";  
  4.        //获取文件信息  
  5.         //nil 表示错误信息不接收  
  6.        NSDictionary *dict =   [fm attributesOfItemAtPath:filePatherror:nil];  
  7.        NSLog(@"%@",dict);  
  8.    
  9.    
  10.    
  11.  NSFileCreationDate = "2016-01-04 03:53:29+0000";  
  12.     NSFileExtendedAttributes =    {  
  13.        "com.apple.TextEncoding" = <7574662d 383b3133 34323137 393834>;  
  14.     };  
  15.     NSFileExtensionHidden = 0;  
  16.     NSFileGroupOwnerAccountID = 20;  
  17.     NSFileGroupOwnerAccountName = staff;  
  18.     NSFileHFSCreatorCode = 0;  
  19.     NSFileHFSTypeCode = 0;  
  20.     NSFileModificationDate ="2016-01-04 03:53:29 +0000";  
  21.     NSFileOwnerAccountID = 501;  
  22.     NSFileOwnerAccountName ="chingwei_macpc";  
  23.     NSFilePosixPermissions = 420;  
  24.     NSFileReferenceCount = 1;  
  25.     NSFileSize = 9;  
  26.     NSFileSystemFileNumber = 11310930;  
  27.     NSFileSystemNumber = 16777220;  
  28.     NSFileType = NSFileTypeRegular;  
  29. }  
  30.    
  31.    
  32.  NSLog(@"%@,%@",[dictobjectForKey:@"NSFileOwnerAccountName"],dict[NSFileOwnerAccountName]);  
  33.    
  34. chingwei_macpc,chingwei_macpc  
  35.    
  36.    
  37.  NSFileManager *fm = [NSFileManager defaultManager];  
  38.          
  39.         NSString *filePath = @"/Users/chingwei_macpc/Desktop/3.txt";  
  40.          NSString *subPath = @"/Users/chingwei_macpc/Desktop/music";  
  41.        //获取文件信息  
  42.         //nil 表示错误信息不接收  
  43.        NSDictionary *dict =   [fm attributesOfItemAtPath:filePatherror:nil];  
  44.        NSLog(@"%@",dict);  
  45.         NSLog(@"%@,%@",[dict objectForKey:@"NSFileOwnerAccountName"],dict[NSFileOwnerAccountName]);  
  46.         //获得指定目录下的文件及子目录  
  47.         //使用递归方式获取  
  48.        NSArray *nsarr = [fm subpathsAtPath:subPath];  
  49.         //NSLog(@"%@",nsarr);  
  50.          
  51.         //subpathsOfDirectoryAtPath不是使用递归方式  
  52.         //递归方式是往栈里放,递归效率低,后进先出,如果文件多,耗性能  
  53.        nsarr = [fm subpathsOfDirectoryAtPath:subPatherror:nil];  
  54.         //NSLog(@"%@",nsarr);  
  55.          
  56.          
  57.         //获取指定目录下的子目录(不在获取后代路径)  
  58.        nsarr = [fm contentsOfDirectoryAtPath:subPatherror:nil];  
  59.        NSLog(@"%@",nsarr);  
  60.       
  61.     }  
  62.     return 0;  
  63.    
  64.    
  65.    
  66. 2016-01-04 23:08:35.062 nsfilemanager获取文件信息[1270:109681] {  
  67.     NSFileCreationDate = "2016-01-0403:53:29 +0000";  
  68.     NSFileExtendedAttributes =    {  
  69.        "com.apple.TextEncoding" = <7574662d 383b3133 34323137 393834>;  
  70.     };  
  71.     NSFileExtensionHidden = 0;  
  72.     NSFileGroupOwnerAccountID = 20;  
  73.     NSFileGroupOwnerAccountName = staff;  
  74.     NSFileHFSCreatorCode = 0;  
  75.     NSFileHFSTypeCode = 0;  
  76.     NSFileModificationDate ="2016-01-04 03:53:29 +0000";  
  77.     NSFileOwnerAccountID = 501;  
  78.     NSFileOwnerAccountName ="chingwei_macpc";  
  79.     NSFilePosixPermissions = 420;  
  80.     NSFileReferenceCount = 1;  
  81.     NSFileSize = 9;  
  82.     NSFileSystemFileNumber = 11310930;  
  83.     NSFileSystemNumber = 16777220;  
  84.     NSFileType = NSFileTypeRegular;  
  85. }  
  86. 2016-01-04 23:08:35.063 nsfilemanager获取文件信息[1270:109681]chingwei_macpc,chingwei_macpc  
  87. 2016-01-04 23:08:35.079 nsfilemanager获取文件信息[1270:109681] (  
  88.     ".DS_Store",  
  89.     "Avril Lavigne - Let Me Go @ GoodMorning America (5_11).mp4",  
  90.     "Avril Lavigne - Live at Buffalo(NY) - My World DVD - Try to Shut Me Up Tour 2003.mp4",  
  91.     "Avril Lavigne - Live in Amsterdam(Netherlands) 17_03_2003.mp4",  
  92.     "Blink-182 - Live @ Red Bull SoundSpace (presented by KROQ) (2013-11-07).mp4",  
  93.     "blink-182 - Live at Blizzcon 2013[FULL SHOW] HD.mp4",  
  94.     "blink-182 - live in Las Vegas 2011[FULL SHOW] HD.mp4",  
  95.     "GREEN DAY - ROCK AM RING 2013[LIVE HD].mp4",  
  96.     "Jon Bon Jovi - Knockin' OnHeaven's Door (Mexico 1997).mp4",  
  97.     kgmusic,  
  98.     LP,  
  99.     "One Ok Rock live in Mexico -YouTube [360p].mp4",  
  100.     "querty\U6b4c\U8bcd.txt",  
  101.     "ROOKiEZ is PUNK'D Street Live inIkebukuro -\U30b3\U30f3\U30d5\U309a\U30ea\U30b1\U30a4\U30b7\U30e7\U30f3\Uff08\U30a2\U30b3\U30fc\U30b9\U30c6\U30a3\U30c3\U30af\Uff09.mp4",  
  102.     "Slash ft. Myles Kennedy &The Conspirators - Live at Pinkpop 2015 (Full Show) - YouTube [720p].mp4",  
  103.     "Slash ft. Myles Kennedy _ TheConspirators - Live at Pinkpop 2015 (Full Show).mp4",  
  104.     "Slash Max Sessions Unplugged HD -YouTube [720p].mp4",  
  105.     "Velvet Revolver -Patience.mp4",  
  106.     "\U5409\U4ed6",  
  107.     "\U6742",  
  108.     "\U77edLIVE",  
  109.     "\U82f1\U96c4\U8054\U76df"  
  110. )  
  111. Program ended with exit code: 0  
  112.    

[cpp] view plain copy
  1. NSFileManager *fm = [NSFileManager defaultManager];  
  2.          
  3.         NSString *filePath = @"/Users/chingwei_macpc/Desktop/3.txt";  
  4.        //获取文件信息  
  5.         //nil 表示错误信息不接收  
  6.        NSDictionary *dict =   [fm attributesOfItemAtPath:filePatherror:nil];  
  7.        NSLog(@"%@",dict);  
  8.    
  9.    
  10.    
  11.  NSFileCreationDate = "2016-01-04 03:53:29+0000";  
  12.     NSFileExtendedAttributes =    {  
  13.        "com.apple.TextEncoding" = <7574662d 383b3133 34323137 393834>;  
  14.     };  
  15.     NSFileExtensionHidden = 0;  
  16.     NSFileGroupOwnerAccountID = 20;  
  17.     NSFileGroupOwnerAccountName = staff;  
  18.     NSFileHFSCreatorCode = 0;  
  19.     NSFileHFSTypeCode = 0;  
  20.     NSFileModificationDate ="2016-01-04 03:53:29 +0000";  
  21.     NSFileOwnerAccountID = 501;  
  22.     NSFileOwnerAccountName ="chingwei_macpc";  
  23.     NSFilePosixPermissions = 420;  
  24.     NSFileReferenceCount = 1;  
  25.     NSFileSize = 9;  
  26.     NSFileSystemFileNumber = 11310930;  
  27.     NSFileSystemNumber = 16777220;  
  28.     NSFileType = NSFileTypeRegular;  
  29. }  
  30.    
  31.    
  32.  NSLog(@"%@,%@",[dictobjectForKey:@"NSFileOwnerAccountName"],dict[NSFileOwnerAccountName]);  

chingwei_macpc,chingwei_macpc


[cpp] view plain copy
  1. NSFileManager *fm = [NSFileManager defaultManager];  
  2.         
  3.        NSString *filePath = @"/Users/chingwei_macpc/Desktop/3.txt";  
  4.         NSString *subPath = @"/Users/chingwei_macpc/Desktop/music";  
  5.       //获取文件信息  
  6.        //nil 表示错误信息不接收  
  7.       NSDictionary *dict =   [fm attributesOfItemAtPath:filePatherror:nil];  
  8.       NSLog(@"%@",dict);  
  9.        NSLog(@"%@,%@",[dict objectForKey:@"NSFileOwnerAccountName"],dict[NSFileOwnerAccountName]);  
  10.        //获得指定目录下的文件及子目录  
  11.        //使用递归方式获取  
  12.       NSArray *nsarr = [fm subpathsAtPath:subPath];  
  13.        //NSLog(@"%@",nsarr);  
  14.         
  15.        //subpathsOfDirectoryAtPath不是使用递归方式  
  16.        //递归方式是往栈里放,递归效率低,后进先出,如果文件多,耗性能  
  17.       nsarr = [fm subpathsOfDirectoryAtPath:subPatherror:nil];  
  18.        //NSLog(@"%@",nsarr);  
  19.         
  20.         
  21.        //获取指定目录下的子目录(不在获取后代路径)  
  22.       nsarr = [fm contentsOfDirectoryAtPath:subPatherror:nil];  
  23.       NSLog(@"%@",nsarr);  
  24.      
  25.    }  
  26.    return 0;  

2016-01-04 23:08:35.062 nsfilemanager获取文件信息[1270:109681] {

    NSFileCreationDate = "2016-01-0403:53:29 +0000";

    NSFileExtendedAttributes =    {

       "com.apple.TextEncoding" = <7574662d 383b3133 34323137 393834>;

    };

    NSFileExtensionHidden = 0;

    NSFileGroupOwnerAccountID = 20;

    NSFileGroupOwnerAccountName = staff;

    NSFileHFSCreatorCode = 0;

    NSFileHFSTypeCode = 0;

    NSFileModificationDate ="2016-01-04 03:53:29 +0000";

    NSFileOwnerAccountID = 501;

    NSFileOwnerAccountName ="chingwei_macpc";

    NSFilePosixPermissions = 420;

    NSFileReferenceCount = 1;

    NSFileSize = 9;

    NSFileSystemFileNumber = 11310930;

    NSFileSystemNumber = 16777220;

    NSFileType = NSFileTypeRegular;

}

2016-01-04 23:08:35.063 nsfilemanager获取文件信息[1270:109681]chingwei_macpc,chingwei_macpc

2016-01-04 23:08:35.079 nsfilemanager获取文件信息[1270:109681] (

    ".DS_Store",

    "Avril Lavigne - Let Me Go @ GoodMorning America (5_11).mp4",

    "Avril Lavigne - Live at Buffalo(NY) - My World DVD - Try to Shut Me Up Tour 2003.mp4",

    "Avril Lavigne - Live in Amsterdam(Netherlands) 17_03_2003.mp4",

    "Blink-182 - Live @ Red Bull SoundSpace (presented by KROQ) (2013-11-07).mp4",

    "blink-182 - Live at Blizzcon 2013[FULL SHOW] HD.mp4",

    "blink-182 - live in Las Vegas 2011[FULL SHOW] HD.mp4",

    "GREEN DAY - ROCK AM RING 2013[LIVE HD].mp4",

    "Jon Bon Jovi - Knockin' OnHeaven's Door (Mexico 1997).mp4",

    kgmusic,

    LP,

    "One Ok Rock live in Mexico -YouTube [360p].mp4",

    "querty\U6b4c\U8bcd.txt",

    "ROOKiEZ is PUNK'D Street Live inIkebukuro -\U30b3\U30f3\U30d5\U309a\U30ea\U30b1\U30a4\U30b7\U30e7\U30f3\Uff08\U30a2\U30b3\U30fc\U30b9\U30c6\U30a3\U30c3\U30af\Uff09.mp4",

    "Slash ft. Myles Kennedy &amp;The Conspirators - Live at Pinkpop 2015 (Full Show) - YouTube [720p].mp4",

    "Slash ft. Myles Kennedy _ TheConspirators - Live at Pinkpop 2015 (Full Show).mp4",

    "Slash Max Sessions Unplugged HD -YouTube [720p].mp4",

    "Velvet Revolver -Patience.mp4",

    "\U5409\U4ed6",

    "\U6742",

    "\U77edLIVE",

    "\U82f1\U96c4\U8054\U76df"

)

Program ended with exit code: 0

 

NSManager增删改查

[cpp] view plain copy
  1. @autoreleasepool {  
  2.          
  3.         NSFileManager *fm = [NSFileManager defaultManager];  
  4.         NSString *filePath = @"/Users/chingwei_macpc/Desktop/3.txt";  
  5.         NSString *subPath = @"/Users/chingwei_macpc/Desktop/music";  
  6.         NSString *createDir =@"/Users/chingwei_macpc/Desktop/aaa";  
  7.         NSString *filePath2 = @"/Users/chingwei_macpc/Desktop/aaa/nsmanager.txt";  
  8.     //创建文件  
  9.         //路径 2.YEs/NO在创建路径的时候如果没有此路径,自己创建,NO的情况之创建最后一个目录,若前一个没有,则会报错 3.属性  
  10.        BOOL isYes =  [fm createDirectoryAtPath:createDirwithIntermediateDirectories:YESattributes:nilerror:nil];  
  11.          
  12.        if (isYes) {  
  13.           NSLog(@"创建成功aaa目录成功");  
  14.        }  
  15.        else{  
  16.           NSLog(@"目录创建失败");  
  17.        }  
  18.          
  19.        NSString *str =@"NSSmaanger创建文件";  
  20.         //nsdata 是一个处理二进制的数据的类  
  21.         NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];  
  22.      isYes =   [fm createFileAtPath:filePath2contents:dataattributes:nil];  
  23.        if (isYes) {  
  24.           NSLog(@"创建文件--->成功");  
  25.    
  26.        }  
  27.        else{  
  28.           NSLog(@"创建文件失败");  
  29.        }  
  30.       
  31.     //copy文件  
  32.       NSString *targetPath =@"/Users/chingwei_macpc/Desktop/aaa/3.txt";  
  33.         filePath = @"/Users/chingwei_macpc/Desktop/3.txt";  
  34.        isYes = [fm copyItemAtPath:filePath toPath:targetPatherror:nil];  
  35.        if (isYes) {  
  36.           NSLog(@"拷贝文件--->成功");  
  37.              
  38.        }  
  39.        else{  
  40.           NSLog(@"拷贝文件--->失败");  
  41.        }  
  42.     //如何移动文件  
  43.         targetPath =@"/Users/chingwei_macpc/Desktop/aaa/4.txt";  
  44.         filePath = @"/Users/chingwei_macpc/Desktop/4.txt";  
  45.        isYes = [fm moveItemAtPath:filePath toPath:targetPatherror:nil];  
  46.        if (isYes) {  
  47.           NSLog(@"移动文件文件--->成功");  
  48.              
  49.        }  
  50.        else{  
  51.           NSLog(@"移动文件--->失败");  
  52.        }  
  53.     //如何删除文件  
  54.         filePath = @"/Users/chingwei_macpc/Desktop/aaa/4.txt";  
  55.        isYes = [fm removeItemAtPath:targetPatherror:nil];  
  56.        if (isYes) {  
  57.           NSLog(@"删除文件--->成功");  
  58.              
  59.        }  
  60.        else{  
  61.           NSLog(@"删除文件--->失败");  
  62.        }  
  63.          
  64.          
  65.       
  66.       
  67.       
  68.       
  69.     }  

 

下载文件思路

发送请求给服务器,要求下载某个文件

服务器发出响应,返回文件数据

手机通过nsdata来存放服务器返回来的数据

利用NSFileManager将,NSData里面的文件数据写到心的文件中

CreateFileAtPath


IOS沙盒机制,以及路径获取方法

IOS应用程序只能访问自己的沙盒(应用沙盒就是文件系统目录,与其他应用的文件系统隔离)

百度音乐下载的歌曲无法通过网易音乐查看,ios的iTunes也无法访问

计算机生成了可选文字:extension 是 i0S8 新 开 放 的 一 种 对 几 个 固 定 系 统 区 域 的 扩 展 机 制 , 它 可 以 在 一 定 程 度 上 弥 补 i0S 的 少 盒 机 制 对 应 用 间 通 信 的 限 制 , extension 的 出 现 , 为 用 户 提 供 了 在 其 它 应 用 中 使 用 我 们 应 用 提 供 的 服 务 的 便 捷 方 式 , 比 如 用 户 可 以 在 Today 的 widgets 中 查 看 应 用 展 示 的 简 珞 信 息 , 而 不 用 再 进 到 我 们 的 应 用 中 , 这 将 是 一 种 全 新 的 用 山 体 验 : 但 是 , extension 的 出 现 可 能 会 减 少 用 户 启 动 应 用 的 次 数 , 同 时 还 会 增 大 开 发 者 的 工 作 量 , 应 用 沙 盒 一 般 包 括 以 下 几 个 文 件 目 录 : h•eferences 目 录 ) 、 tmp. 用 礻 呈 , 帛 飠 鬆 Documents 、 Libaray ( 下 面 有 Caches 和 应 用 程 序 包 : 包 含 所 有 的 资 源 文 件 和 可 执 行 文 件 ,

 

计算机生成了可选文字:Documents• 保 存 应 用 运 行 时 生 成 的 需 要 持 久 化 的 据 , iTunes 会 自 动 备 份 该 目 录 。 苹 果 建 议 将 程 序 中 建 立 的 或 在 程 序 中 浏 览 到 的 文 件 数 据 保 存 在 该 目 录 下 , iTunes 备 份 和 恢 复 的 时 候 会 包 括 此 目 录 tmp: 保 存 应 用 运 行 时 所 需 的 临 时 数 据 , 使 用 完 毕 后 再 将 相 应 的 文 件 从 该 目 录 删 除 。 应 用 没 有 运 行 时 , 系 统 也 有 可 能 会 清 除 该 目 录 下 的 文 件 , iTunes 不 会 同 步 该 目 录 , iPhone 重 启 时 , 该 目 录 下 的 文 件 会 丢 失 , Library: 存 储 程 序 的 默 认 设 置 和 其 他 狀 态 信 息 , iTunes 会 自 动 备 份 该 目 录 · Libaraw ℃ aches: 存 放 缓 存 文 件 , iTunes 不 会 备 份 此 目 录 , 此 目 录 下 文 件 不 会 在 应 用 退 出 删 除 , 一 股 存 放 体 积 比 较 大 , 不 是 特 别 重 要 的 资 源 。

Preperences偏好设置文件,可以存储2个t的文件

计算机生成了可选文字:获 取 绝 对 路 径 的 方 法 NSSearchPathForDirectoriesInDomains 返 回 一 个 绝 对 路 径 用 来 存 放 我 们 需 要 储 存 的 文 件 第 一 个 参 数 : 要 获 取 的 沙 盒 文 件 夹 名 称 第 = 个 参 数 NSUserDomainMask = 1 丷 7 用 户 主 目 录 中 NSLoca1DonainMask = 2 丷 7 当 前 机 器 中 NSNetworkDomainMask = 4 丷 7 网 络 中 可 见 的 主 机 NSSystemDomainMask = 8 , / / 系 统 目 北 不 可 修 改 (/System ) N 第 三 个 参 数 : YES/NO = Ox0ffff 丷 7 全 部 是 否 获 取 全 路 径


[cpp] view plain copy
  1. #import<Foundation/Foundation.h>  
  2.    
  3. int main(intargc,const char* argv[]) {  
  4.     @autoreleasepool {  
  5.          
  6.          
  7.        //沙盒根路径  
  8.        NSString *sandBoxPath = NSHomeDirectory();  
  9.        NSLog(@"%@",sandBoxPath);  
  10.         ///Users/chingwei_macpc  
  11.          
  12.          
  13.          
  14.         //documents目录  
  15.         NSArray *arrayPaths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory,NSUserDomainMask ,YES);  
  16.        NSLog(@"%@",arrayPaths);  
  17.       
  18.        /*( 
  19.        "/Users/chingwei_macpc/Library/Documentation" 
  20.        )*/  
  21.          
  22.        NSString *documentPath = [arrayPaths firstObject];  
  23.        NSLog(@"%@",documentPath);  
  24.        NSString *documentPath2 = [arrayPathslastObject];  
  25.        NSLog(@"%@",documentPath2);  
  26.    
  27.          
  28.         //获取沙盒的NSLibraryDirectory  
  29.          arrayPaths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask ,YES);  
  30.        NSLog(@"%@",arrayPaths);  
  31.          
  32.          
  33.         // //在自己的沙盒路径创建一个文件  
  34.         NSString *str = [[arrayPaths lastObject]stringByAppendingString:@"Preferences/1.txt"];  
  35.        NSString *contents = @"abc";  
  36.         [str writeToFile:contents atomically:YESencoding:NSUTF8StringEncodingerror:nil];  
  37.          
  38.          
  39.     }  
  40.     return 0;  
  41.    
  42. 2016-01-05 20:41:48.791沙盒机制[954:60468] /Users/chingwei_macpc  
  43. 2016-01-05 20:41:48.792沙盒机制[954:60468] (  
  44.    "/Users/chingwei_macpc/Library/Documentation"  
  45. )  
  46. 2016-01-05 20:41:48.793沙盒机制[954:60468] /Users/chingwei_macpc/Library/Documentation  
  47. 2016-01-05 20:41:48.793沙盒机制[954:60468] /Users/chingwei_macpc/Library/Documentation  
  48. 2016-01-05 20:41:48.793沙盒机制[954:60468] (  
  49.    "/Users/chingwei_macpc/Library"  
  50. )  
  51. Program ended with exit code: 0  
  52.    
  53.    
  54.    
  55.    
  56. 常见的结构体  
  57.   @autoreleasepool {  
  58.         //NSPoint是CGPoint的别名  
  59.        NSPoint nsp  ;  
  60.        CGPoint cgp ;  
  61.        nsp.x = 100 ;  
  62.        nsp.y = 200 ;  
  63.        cgp.x = 50 ;  
  64.        cgp.y = 50 ;  
  65.        NSPoint point2 = {10,20};  
  66.        CGPoint point1 = {20 ,30};  
  67.          
  68.          
  69.         //OC特有的赋值方式  
  70.        CGPoint c4 = CGPointMake(4,5);  
  71.        NSPoint np4 = NSMakePoint(5,6);  
  72.          
  73.         //CGSize 和 NSSize表示平面的面积  
  74.        CGSize c5 = CGSizeMake(5,6);  
  75.        NSSize s4 = NSMakeSize(5,5);  
  76.          
  77.        c5.width = 10 ;  
  78.        c5.height = 30;  
  79.          
  80.         //表示平面上某个点的矩形区域 x , y, w, h  
  81.        CGRect r4 = CGRectMake(4,5, 6, 7);  
  82.        NSRect r2 = NSMakeRect(4,5, 6, 7);  
  83.       
  84.        NSRect r6 = {{4,3},{5,6}};  
  85.          
  86.        r4.origin.x= 0;  
  87.        r4.origin.y= 0 ;  
  88.        r4.size.height= 10;  
  89.        r4.size.width= 10 ;  
  90.        /* 
  91.        struct CGRect { 
  92.            CGPoint origin; 
  93.            CGSize size; 
  94.        }; 
  95.        */  
  96.          
  97.         //快速查看结构体的值  
  98.          
  99.          
  100.         NSLog(@"r4= %@",NSStringFromRect(r4));  
  101.         //2016-01-05 21:12:12.808 常见结构体[1039:83930]r1 = {{0, 0}, {10, 10}}  
  102.         //苹果官方推荐使用CG开头的  
  103.          
  104.     }  
  105.     return 0;  
  106.    
  107.    
  108.  @autoreleasepool {  
  109.         //NSNumber 将int floatdouble包装成一个对象  
  110.          
  111.         //好处将基本的数据类型的数据,保存到数组或字典中  
  112.          
  113.        int a  = 10 ;  
  114.         NSNumber *intObj = [NSNumber numberWithInt:a];  
  115.         NSMutableArray *array = [NSMutableArrayarrayWithObjects:intObj, nil];  
  116.          
  117.          
  118.          
  119.        float f1 = 29.3f;  
  120.         NSNumber *floatObj = [NSNumber numberWithFloat:f1];  
  121.         
  122.        [array addObject:floatObj];  
  123.          
  124.          
  125.        double d1 = 10.4;  
  126.         NSNumber  *doubleObj = [NSNumber numberWithDouble:d1];  
  127.        [array addObject:doubleObj];  
  128.          
  129.         
  130.          
  131.        NSNumber *n1 = array[0];  
  132.        int a1 = [n1 intValue];  
  133.          
  134.        NSNumber *n2 = array[1];  
  135.        float f2 = [n2 floatValue];  
  136.          
  137.        NSLog(@"a1+f2=%f",a1+f2);  
  138.          
  139.          
  140.        a1 = [array[0] intValue]+[array[1] floatValue];  
  141.        NSLog(@"a1=%d",a1);  
  142.          
  143.          
  144.          
  145.         //NSNumber简写形式  
  146.        [array addObject:@(a)];  
  147.        [array addObject:@(f1)];  
  148.        [array addObject:@(a1)];  
  149.        [array addObject:@18];  
  150.        [array addObject:@20.4f];  
  151.        [array addObject:@9.4];  
  152.        [array addObject:@YES];  
  153.         NSLog(@"array=%@",array);  
  154.          
  155.          
  156.        NSComparisonResult  r1 =[array[1] compare:array[0]];  
  157.        NSLog(@"r1= %ld",r1);  
  158.          
  159.     }  
  160.     return 0;  

[cpp] view plain copy
  1. #import<Foundation/Foundation.h>  
  2.    
  3. int main(intargc,const char* argv[]) {  
  4.     @autoreleasepool {  
  5.          
  6.          
  7.        //沙盒根路径  
  8.        NSString *sandBoxPath = NSHomeDirectory();  
  9.        NSLog(@"%@",sandBoxPath);  
  10.         ///Users/chingwei_macpc  
  11.          
  12.          
  13.          
  14.         //documents目录  
  15.         NSArray *arrayPaths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory,NSUserDomainMask ,YES);  
  16.        NSLog(@"%@",arrayPaths);  
  17.       
  18.        /*( 
  19.        "/Users/chingwei_macpc/Library/Documentation" 
  20.        )*/  
  21.          
  22.        NSString *documentPath = [arrayPaths firstObject];  
  23.        NSLog(@"%@",documentPath);  
  24.        NSString *documentPath2 = [arrayPathslastObject];  
  25.        NSLog(@"%@",documentPath2);  
  26.    
  27.          
  28.         //获取沙盒的NSLibraryDirectory  
  29.          arrayPaths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask ,YES);  
  30.        NSLog(@"%@",arrayPaths);  
  31.          
  32.          
  33.         // //在自己的沙盒路径创建一个文件  
  34.         NSString *str = [[arrayPaths lastObject]stringByAppendingString:@"Preferences/1.txt"];  
  35.        NSString *contents = @"abc";  
  36.         [str writeToFile:contents atomically:YESencoding:NSUTF8StringEncodingerror:nil];  
  37.          
  38.          
  39.     }  
  40.     return 0;  

2016-01-05 20:41:48.791沙盒机制[954:60468] /Users/chingwei_macpc

2016-01-05 20:41:48.792沙盒机制[954:60468] (

   "/Users/chingwei_macpc/Library/Documentation"

)

2016-01-05 20:41:48.793沙盒机制[954:60468] /Users/chingwei_macpc/Library/Documentation

2016-01-05 20:41:48.793沙盒机制[954:60468] /Users/chingwei_macpc/Library/Documentation

2016-01-05 20:41:48.793沙盒机制[954:60468] (

   "/Users/chingwei_macpc/Library"

)

Program ended with exit code: 0

 

 

常见的结构体

  

[cpp] view plain copy
  1. @autoreleasepool {  
  2.         //NSPoint是CGPoint的别名  
  3.        NSPoint nsp  ;  
  4.        CGPoint cgp ;  
  5.        nsp.x = 100 ;  
  6.        nsp.y = 200 ;  
  7.        cgp.x = 50 ;  
  8.        cgp.y = 50 ;  
  9.        NSPoint point2 = {10,20};  
  10.        CGPoint point1 = {20 ,30};  
  11.          
  12.          
  13.         //OC特有的赋值方式  
  14.        CGPoint c4 = CGPointMake(4,5);  
  15.        NSPoint np4 = NSMakePoint(5,6);  
  16.          
  17.         //CGSize 和 NSSize表示平面的面积  
  18.        CGSize c5 = CGSizeMake(5,6);  
  19.        NSSize s4 = NSMakeSize(5,5);  
  20.          
  21.        c5.width = 10 ;  
  22.        c5.height = 30;  
  23.          
  24.         //表示平面上某个点的矩形区域 x , y, w, h  
  25.        CGRect r4 = CGRectMake(4,5, 6, 7);  
  26.        NSRect r2 = NSMakeRect(4,5, 6, 7);  
  27.       
  28.        NSRect r6 = {{4,3},{5,6}};  
  29.          
  30.        r4.origin.x= 0;  
  31.        r4.origin.y= 0 ;  
  32.        r4.size.height= 10;  
  33.        r4.size.width= 10 ;  
  34.        /* 
  35.        struct CGRect { 
  36.            CGPoint origin; 
  37.            CGSize size; 
  38.        }; 
  39.        */  
  40.          
  41.         //快速查看结构体的值  
  42.          
  43.          
  44.         NSLog(@"r4= %@",NSStringFromRect(r4));  
  45.         //2016-01-05 21:12:12.808 常见结构体[1039:83930]r1 = {{0, 0}, {10, 10}}  
  46.         //苹果官方推荐使用CG开头的  
  47.          
  48.     }  
  49.     return 0;  
  50.    
  51.    
  52.  @autoreleasepool {  
  53.         //NSNumber 将int floatdouble包装成一个对象  
  54.          
  55.         //好处将基本的数据类型的数据,保存到数组或字典中  
  56.          
  57.        int a  = 10 ;  
  58.         NSNumber *intObj = [NSNumber numberWithInt:a];  
  59.         NSMutableArray *array = [NSMutableArrayarrayWithObjects:intObj, nil];  
  60.          
  61.          
  62.          
  63.        float f1 = 29.3f;  
  64.         NSNumber *floatObj = [NSNumber numberWithFloat:f1];  
  65.         
  66.        [array addObject:floatObj];  
  67.          
  68.          
  69.        double d1 = 10.4;  
  70.         NSNumber  *doubleObj = [NSNumber numberWithDouble:d1];  
  71.        [array addObject:doubleObj];  
  72.          
  73.         
  74.          
  75.        NSNumber *n1 = array[0];  
  76.        int a1 = [n1 intValue];  
  77.          
  78.        NSNumber *n2 = array[1];  
  79.        float f2 = [n2 floatValue];  
  80.          
  81.        NSLog(@"a1+f2=%f",a1+f2);  
  82.          
  83.          
  84.        a1 = [array[0] intValue]+[array[1] floatValue];  
  85.        NSLog(@"a1=%d",a1);  
  86.          
  87.          
  88.          
  89.         //NSNumber简写形式  
  90.        [array addObject:@(a)];  
  91.        [array addObject:@(f1)];  
  92.        [array addObject:@(a1)];  
  93.        [array addObject:@18];  
  94.        [array addObject:@20.4f];  
  95.        [array addObject:@9.4];  
  96.        [array addObject:@YES];  
  97.         NSLog(@"array=%@",array);  
  98.          
  99.          
  100.        NSComparisonResult  r1 =[array[1] compare:array[0]];  
  101.        NSLog(@"r1= %ld",r1);  
  102.          
  103.     }  
  104.     return 0;  

计算机生成了可选文字:NS № mber 是 NSVa1ue 的 了 类 , NSValue 主 要 用 来 把 指 针 , CGRect 结 构 体 等 包 装 成 对 象 , 以 便 存 储 · 一 个 NSVa1ue 对 象 是 用 来 存 储 一 个 C 或 者 Objective 一 C 数 据 的 简 单 容 器 , 它 可 以 保 存 任 意 类 型 的 数 据 , 比 如 int , float, char, 当 然 也 可 以 是 指 pointers . structures, and object ids. NSValue 类 的 目 标 就 是 允 许 以 上 数 据 类 型 的 数 据 结 构 能 够 被 添 加 到 集 合 里 , 例 如 那 些 需 要 其 元 素 是 对 象 的 数 据 结 构 , 如 NSArray 或 者 NSSet 的 实 例 · 需 要 注 意 的 是 NSVa1ue 对 象 一 百 是 不 可 枚 举 的 ,

 

[cpp] view plain copy
  1. @autoreleasepool {  
  2.          
  3.         //创建一个结构体变量  
  4.        CGPoint c1 = CGPointMake(4,2);  
  5.         //NSMutableArray*array1 = [NSMutableArray array];  
  6.         NSValue *v1 = [NSValue valueWithPoint:c1];  
  7.          
  8.         //[array1addObject:v1];  
  9.         NSMutableArray *array1 = [NSMutableArrayarrayWithObjects:v1    , nil];  
  10.        CGRect r1 =    CGRectMake(4, 4, 5, 5);  
  11.         NSValue *v2 = [NSValue valueWithRect:r1];  
  12.        [array1 addObject:v2];  
  13.          
  14.         
  15.          
  16.         //接收一个rect的nsvalue  
  17.        NSValue *r1val = [array1 lastObject];  
  18.         NSRect r2 =  [r1val rectValue];  
  19.         NSLog(@"r2 = %@",NSStringFromRect(r2));  
  20.          
  21.        //一般结构体  
  22.        typedef structDate{  
  23.            int yeat ;  
  24.            int month ;  
  25.            int day ;  
  26.        }myDate;  
  27.          
  28.        myDate mydate1 ={1989,12,07};  
  29.         //传送一个常量指针 后一句话作用把MyDate类型生成一个常量字符串描述  
  30.         NSValue *mydateVal = [NSValue valueWithBytes:&mydate1 objCType:@encode(myDate)];  
  31.        [array1 addObject:mydateVal];  
  32.          
  33.         NSLog(@"array= %@",array1);  
  34.         //"<c5070000 0c000000 07000000>"  
  35.          
  36.         //从数组中取出来的NSValue对象  
  37.         //在对象中,取出结构体变量的值  
  38.         //传入一个结构体变量的地址  
  39.         //getValue获取结构值,保存到结构体变量tmd  
  40.        myDate tmd ;  
  41.        [mydateVal getValue:&tmd];  
  42.        NSLog(@"tmd= %d,%d,%d",tmd.yeat,tmd.month,tmd.day);  
  43.         //2016-01-0522:50:59.585 NSValue[1423:127371] tmd = 1989,12,7  
  44.          
  45.          
  46.     }  
  47.     return 0;  
  48.    
  49.    
  50.    
  51. NSDate *date2 = [NSDatedate];  
  52.         NSLog(@"格林威治时间(默认时间)时间 %@",date2);//获取的时间是格林威治时间 0时区的  
  53.          
  54.        //设置时区  
  55.         NSTimeZone * ntz = [NSTimeZone systemTimeZone];  
  56.          
  57.        //设置时间间隔  
  58.        NSInteger interval = [ntz secondsFromGMTForDate:date2];  
  59.        //重新生成时间  
  60.        NSDate *localDate = [ date2 dateByAddingTimeInterval:interval];  
  61.        NSLog(@"当前日期:%@",localDate);  
  62.          
  63.        //格式化日期  
  64.         NSDateFormatter *formatter = [NSDateFormatternew];  
  65.         formatter.dateFormat =@"yyyy年MM月dd日HH:mm:ss";  
  66.        NSString *dateStr = [formatter stringFromDate:date2];  
  67.        NSLog(@"当前时间 %@",dateStr);  
  68.          
  69.          
  70.        //计算日期  
  71.        NSTimeInterval t = 60*60*24;  
  72.         NSDate *tom = [NSDate dateWithTimeIntervalSinceNow:t];  
  73.            dateStr= [formatterstringFromDate:tom];  
  74.         NSLog(@"明天此刻时间 %@",dateStr);  
  75.          
  76.         //计算昨天此刻时间  
  77.        t = -60*60*24;  
  78.        NSDate *yesterday = [date2 addTimeInterval:t];  
  79.         //'addTimeInterval:'is deprecated: first deprecated in OS X 10.6  
  80.         //过时的方法,可以使用NSDate dateWithTimeIntervalSinceNow:t]  
  81.        dateStr= [formatterstringFromDate:yesterday];  
  82.        NSLog(@"昨天此刻时间 %@",dateStr);  
  83.    
  84.         //日期对象创建一个日历对象unit单元  
  85.        
  86.         int unit =NSCalendarUnitMinute|NSCalendarUnitSecond|NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour;  
  87.        NSDate *c3 = [NSDate date];  
  88.         NSCalendar *ca1 = [NSCalendar currentCalendar];  
  89.         NSDateComponents *ndc1 = [ca1 components:unitfromDate:c3];  
  90.       NSLog(@"%ld年,%ld月,%ld日,%ld时,%ld分,%ld秒",ndc1.year,(long)ndc1.month,ndc1.day,ndc1.hour,ndc1.minute,ndc1.second);  
  91.         //2016年,1月,6日,2时,8分,1秒  
  92.    
  93.         NSCalendar *cal = [NSCalendar currentCalendar];  
  94.         NSDateFormatter *formatter2 = [NSDateFormatternew];  
  95.        //一定要有这句  
  96.         formatter2.dateFormat=@"yyyy-MM-dd HH:mm:ss";  
  97.         NSString *time1 = @"2014-04-0820:20:23";  
  98.          
  99.         NSString *time2 = @"2015-05-0821:23:23";  
  100.          
  101.        NSDate *c1 = [formatter2 dateFromString:time1];  
  102.        NSDate *c2 = [formatter2 dateFromString:time2];  
  103.          
  104.        NSLog(@"c1=%@,c2=%@\n",c1,c2);  
  105.         NSDateComponents *cms = [cal components:unitfromDate:c1 toDate:c2options:0];  
  106.          
  107.    
  108.        NSLog(@"相差%ld年,%ld月,%ld日,%ld时,%ld分,%ld秒",cms.year,cms.month,cms.day,cms.hour,cms.minute,cms.second);  
  109.          
  110.    
  111.    
  112.    
  113.  Person *p = [Personnew];  
  114.          
  115.         NSMutableArray *arr = [[NSMutableArray alloc] init];  
  116.        [arr addObject:p];  
  117.         //[arr addObject:p];  
  118.        [arr removeObject:p];  
  119.         //如果对象从数组中移除,对象的引用计数器 -1  
  120.          
  121.         NSLog(@"person.retainCount=%ld",p.retainCount);  
  122.          
  123.        //数组被销毁  
  124.        [arr release];  
  125.         //array 数组中没有元素之后,对对象p没有影响  
  126.          
  127.         [p release];  
  128.          
  129.         //数组销毁的时候,对对象发送了一次release消息  
  130.          
  131.         //销毁顺序,数组--->数组向其中的对象也发送release  
  132.          
  133.          
  134.         //当对象被添加到数组的时候,对象引用计数器 +1 remove开头的方法名对象,被移除的对象引用计数器 -1  
  135.         //当数组销毁的时候,集合/数组会向它其中的所有元素发送一次release消息  
  136.         //数组被销毁了,里面存储的对象不一定被销毁  
  137.    
  138.    

使用copy会产生一个副本的过程。

修改源文件的内容,不会影响副本文件

修改副本的内容,不会影响源文件


oc的copy是指对象的拷贝。

作用:利用一个源对象产生一个副本对象


计算机生成了可选文字:3 ) PY 一 个 对 象 可 以 调 用 copy 或 mutableCopy 方 法 来 创 建 一 个 副 本 对 象 copy : 创 建 的 不 可 变 副 本 ( 如 stri 、 NSArray 、 NSDictionary) mutableCopy : 创 建 的 是 可 变 副 本 ( 如 NSMutab1eString 、 NSMutab1eArray 、 NSMutab1eDictionary)

 

计算机生成了可选文字:copy : ncopyWi thZone: gprotocol NSCopying (id)copyWithZone: (NSZone zone: gend mutableCopy : FznffiNutab1eCopying»u, ©protocol NSMutab1eCopying — (id)mutab1eCopyWithZone: (NSZone gend nmu tabl eCopyWi thZone :

 

不可变对象,copy产生的对象也是不可变的

NSString产生的对象也只能用NSString接收

[cpp] view plain copy
  1.    
  2.  Dog *d = [Dognew];  
  3.        //Dog *byd = [d copy];  
  4. //copyWithZone错误  
  5.          
  6.        NSString *str1 = @"abv";  
  7.        NSString *str2 = [str1 copy];  
  8.        NSLog(@"%@",str2);  
  9.          
  10.         //可变对象产生的对象也是可变的  
  11.         //不管对象时否可变,只要使用mutableCopy的对象都是可变的  
  12.         NSMutableString *str4 = [str1 mutableCopy];  
  13.        [str4 appendString:@"xxxxxxx"];  
  14.    
  15.        NSLog(@"%@",str4);  
  16.          
  17.          
  18.        /* 
  19.         *** Terminating app due to uncaught exception'NSInvalidArgumentException', reason: 'Attempt to mutate immutable object withappendString:' 
  20.   
  21.         */  
  22.         //copy不可变的  
  23.        NSMutableString *str5 = [str1 copy];  
  24.        [str5 appendString:@"xxxxxxx"];  
  25.         NSLog(@"%@",str5);  
  26.          
  27.          
  28.     }  


Copy是浅复制mutableCopy是深复制

 

计算机生成了可选文字:深 复 制 ( 深 拷 贝 , 内 容 拷 贝 , deep copy) 源 对 象 和 副 本 对 象 是 不 同 的 两 个 对 象 源 对 象 引 用 计 数 器 不 变 , 副 本 对 象 计 数 器 为 1 ( 因 为 是 新 产 生 的 ) 本 质 是 : 产 生 了 新 的 对 象 浅 复 制 ( 浅 拷 贝 , 指 针 拷 贝 , shallow copy) 源 对 象 和 副 本 对 象 是 同 一 个 对 象 源 对 象 ( 副 本 对 象 ) 引 用 计 数 器 + 1 , 相 当 于 做 一 次 retain 操 作 本 质 是 : 没 有 产 生 新 的 对 象 「

计算机生成了可选文字:@property 内 存 管 理 策 珞 的 选 择 1. 非 ARC 1 > copy : 只 用 于 NSString\b10ck 2 > retain : 除 NSString\b10ck 以 外 的 对 象 3 > assign : 基 本 数 据 类 型 、 枚 举 、 结 构 体 ( 非 对 象 ) , 当 2 个 对 象 相 互 引 用 , 一 端 用 retain, 一 一 端 月 lassi 1 0 copy : 只 •ng\block 2 > strong . 除 NSstring № lock 以 夕 卜 的 对 象 3 > weak : 当 2 个 对 象 相 互 引 用 , 一端 用 strong, 一端 用 weak 4 〉 assgin : 基 本 数 据 类 型 、 枚 举 、 结 构 体 ( 非 对 象 )

[cpp] view plain copy
  1. #import<Foundation/Foundation.h>  
  2. #import"Person.h"  
  3. int main(intargc,const char* argv[]) {  
  4.     @autoreleasepool {  
  5.          
  6.        Person *p = [Personnew];  
  7.          
  8.          
  9.          
  10.         NSMutableString *str = [NSMutableStringstring];  
  11.        [strappendString:@"张无忌"];  
  12.        p.name = str;  
  13.    
  14.        NSLog(@"p.name=%@",p.name);  
  15.          
  16.          
  17.        [strappendString:@"&&老顽童"];  
  18.         NSLog(@"p.name=%@",p.name);  
  19.          
  20.        [p release];  
  21.          
  22.          
  23.     }  
  24.     return 0;  
  25. }  
  26.    
  27.   
  28. #import<Foundation/Foundation.h>  
  29.    
  30. @interface Person :NSObject  
  31.         //retain方式不能产生副本  
  32. //@property(nonatomic,retain) NSString *name;  
  33. @property (nonatomic,copy)NSString *name;  
  34. @end  
  35.    
  36.    
  37. #import"Person.h"  
  38.    
  39. @implementation Person  
  40. - (void)dealloc  
  41. {  
  42.     [_namerelease];  
  43.     NSLog(@"Person对象释放");  
  44.     [superdealloc];  
  45. }  
  46. @end  

因为setName内部是copy计数器加1所以dealloc的方法需要release一次

计算机生成了可选文字:— (void)setName: (NSString if (_name != name) { [_name release] ; _name = [name ;

 

为自定义类使用copy,遵守NSCopying协议

实现copywithzone方法,返回值是id类型,需要返回一个对象的副本

如果对象没有可变或者不可变区别,的情况,只需要实现copywithzone方法。

copywithzone的参数zone可以不去理会,历史问题

计算机生成了可选文字:#import <Foundation/Foundation. h> #import "Person. h" int main(int argc, const char * argv[]) { tutoreleasepool { = [Person new Person tuiNum = lø; p. p. speed = , p. tuiNum,p. speed) ; Person tuiNum pl. speed pl. [p copy] ; =løø; tuiNum = pl. speed — 2ø16-e1-ø6 *Afi7 pl.tuiNum leø,pl. speed 3ee;

改变对象1的同时会改变对象2

copyWithZone中修改如下

自定义的对象copy都是深复制

计算机生成了可选文字:9 10 11 12 — 13 NSLog (@'fifi7 ) ; 14 15 [ [Person al loc] Person *d = 16 17 pee —s . spee d. tuiNum = self. tuiNum; 18 19 20 return d; 21 22 } @end 23 24 #import "Person. h" @implementation Person (id)copyWithZone: (nullable NSZone zone{ *Afi7 :515752 la,p.speed løe; :515752 leø,pl.speed 3øe; init] ; 2ø16-e1-ø6 2ø16-e1-ø6 p. tuiNum 2ø16-e1-ø6 pl. tu iNum Program ended with exit code:


[cpp] view plain copy
  1. #import<Foundation/Foundation.h>  
  2. #import"Person.h"  
  3. int main(intargc,const char* argv[]) {  
  4.     @autoreleasepool {  
  5.          
  6.        Person *p = [Personnew];  
  7.        p.tuiNum = 10;  
  8.        p.speed = 100;  
  9.          
  10.        Person *p1 = [p copy];  
  11.        p1.tuiNum =100;  
  12.        p1.speed = 300;  
  13.         NSLog(@"p.tuiNum =%d,p.speed = %d;",p.tuiNum,p.speed);  
  14.         NSLog(@"p1.tuiNum =%d,p1.speed = %d;",p1.tuiNum,p1.speed);  
  15.         
  16.          
  17.     }  
  18.     return 0;  
  19. }  
  20.    
  21. #import<Foundation/Foundation.h>  
  22.    
  23. @interface Person :NSObject<NSCopying>  
  24. @property(nonatomic,assign)int tuiNum;  
  25. @property(nonatomic,assign)int speed ;  
  26. //@property(nonatomic,copy)  
  27. @end  
  28.    
  29.    
  30. #import"Person.h"  
  31.    
  32. @implementation Person  
  33. - (id)copyWithZone:(nullableNSZone *)zone{  
  34.       
  35.     NSLog(@"执行了copy方法");  
  36.       
  37.     Person *d = [[Person alloc] init];  
  38.     d.speed =self.speed;  
  39.     d.tuiNum =self.tuiNum;  
  40.       
  41.       
  42.     return d;  
  43. }  
  44. @end  


单例模式

计算机生成了可选文字:1 ) 什 么 鱟 蓽 例 式 (Singleton) 0 单 例 模 式 的 意 图 是 的 类 的 对 象 成 为 系 统 中 唯 一 的 实 倪 , 提 供 一 个 访 问 点 , 供 客 户 类 共 享 资 源 , 2 ) 什 么 情 况 下 使 蓽 例 ? 1 、 类 只 能 有 一 个 实 倪 , 而 且 必 须 从 一 个 为 人 熟 知 的 访 问 点 对 , & 行 访 问 , 比 如 工 厂 方 法 , 2 、 这 个 唯 一 的 实 倪 只 能 通 过 子 类 化 进 行 扩 展 , 而 且 扩 展 的 对 象 不 会 破 坏 客 户 端 代 码 · 3 ) 蓽 例 设 计 式 的 要 点 : ( 1) 某 个 类 只 能 有 一 个 实 例 , ( 2 ) 他 必 须 自 行 创 建 这 个 对 象 ( 3 ) 必 须 自 行 向 整 个 系 统 提 供 这 个 实 例 、 ( 4 ) 为 了 保 证 实 例 的 唯 一 性 , 我 们 必 须 将

 

单例模式下,一个类中设定了值所有类都能获取到

[cpp] view plain copy
  1. #import<Foundation/Foundation.h>  
  2. #import"Tools.h"  
  3. #import"Person.h"  
  4. #import"Cat.h"  
  5. #import"Dog.h"  
  6. int main(intargc,const char* argv[]) {  
  7.     @autoreleasepool {  
  8.         //对象在任何时候,都只有一个,好处是,在多个类之间共享数据  
  9.        //设计要点:  
  10.         //1.保证唯一,程序运行期间必须唯一  
  11.         //2.单例类,必须提供一个接入点,特殊的类方法  
  12.          
  13.        Person *p = [Personnew];  
  14.        [p run];  
  15.          
  16.        Dog *d = [Dognew];  
  17.        [d run];  
  18.          
  19.        Cat *c = [Catnew];  
  20.        [c eat];  
  21.          
  22.           
  23.     }  
  24.     return 0;  
  25. }  
  26.    
  27.    
  28.    
  29. #import<Foundation/Foundation.h>  
  30.    
  31. @interfaceTools :NSObject<NSCopying>//继承NSCopying协议  
  32. @property (nonatomic,assign)int num ;  
  33. @property (nonatomic,copy)NSString *text;  
  34. //提供一个接入点类方法  
  35. +(instancetype)shareInstances;  
  36. @end  
  37.    
  38.    
  39.    
  40. #import"Tools.h"  
  41. //定义一个全局变量  
  42. Tools *instances =nil;  
  43. @implementationTools   
  44. +(instancetype)shareInstances{  
  45.       
  46.     //目的:保证对象必须唯一  
  47.     if(instances ==nil){  
  48.        //创建一个对象  
  49.         instances = [[Tools alloc] init];  
  50.        return instances;  
  51.     }  
  52.       
  53.       
  54.     return instances ;  
  55.       
  56. }  
  57. +(id)allocWithZone:(struct_NSZone *)zone{  
  58.       
  59.     @synchronized(self) {//同一个时间只准一个对象访问,线程保护  
  60.        if (instances== nil) {  
  61.            instances = [super allocWithZone:zone];  
  62.            return instances;  
  63.        }  
  64.          
  65.     }  
  66.     return instances;  
  67.       
  68. }  
  69. -(id)copyWithZone:(nullableNSZone *)zone{  
  70.       
  71.    
  72.     returnself ;//并没有copy直接return self  
  73.       
  74. }  
  75.    
  76. -(id)retain{  
  77.     return self;  
  78. }  
  79. -(NSUInteger)retainCount{  
  80.     return NSUIntegerMax;  
  81. }  
  82. -(onewayvoid)release{  
  83.       
  84. }  
  85. -(id)autorelease{  
  86.     return self;  
  87. }  
  88. @end  
  89.    
  90.    
  91. #import<Foundation/Foundation.h>  
  92.    
  93. @interface Person :NSObject  
  94. -(void)run;  
  95. @end  
  96.    
  97. #import"Person.h"  
  98. #import"Tools.h"  
  99. @implementation Person  
  100. -(void)run{  
  101.       
  102.     Tools *toolPerson = [Tools shareInstances];  
  103.      
  104.     //NSLog(@"toolPerson=%d,toolPerson=%@",toolPerson.num,toolPerson.text);  
  105.       
  106.    toolPerson.num = 10 ;  
  107.    toolPerson.text =@"heima";  
  108.    //设置  
  109.       
  110. }  
  111. @end  
  112.    
  113.    
  114.   
  115. #import<Foundation/Foundation.h>  
  116.    
  117. @interface Dog :NSObject  
  118. -(void)run;  
  119. @end  
  120.    
  121.   
  122.    
  123. #import"Dog.h"  
  124. #import"Tools.h"  
  125. @implementation Dog  
  126. -(void)run{  
  127.     Tools *toolDog = [Tools shareInstances];  
  128.     NSLog(@"toolDog=%d,toolDog=%@",toolDog.num,toolDog.text);  
  129.       
  130.    //设置  
  131.     toolDog.num = 12 ;  
  132.     toolDog.text =@"oooddddd";  
  133. }  
  134. @end  
  135.    
  136.    
  137. #import<Foundation/Foundation.h>  
  138.    
  139. @interface Cat :NSObject  
  140. -(void)eat;  
  141. @end  
  142.    
  143.    
  144. #import"Cat.h"  
  145. #import"Tools.h"  
  146. @implementation Cat  
  147. -(void)eat{  
  148.     Tools *toolCat = [[Toolsalloc]init];  
  149.     //需要重新alloc才不会创建新的对象  
  150.     // Tools*toolCat = [Tools shareInstances];  
  151.     NSLog(@"toolCat=%d,toolCat=%@",toolCat.num,toolCat.text);  
  152. }  
  153. @end<span style="font-family: Calibri;font-size:18px; background-color: rgb(255, 255, 255);"> </span>  

0 0