OC部分基础笔记

ctri+I Xcode 格式化
//文件夹操作
1.输出文件中固定路径的代码行数
NSString *content=[NSString stringWithContentsOfFile:@”/Users/chenkq/Desktop/未命名文件夹/1-porcoto/1-porcoto/main.m” encoding:NSUTF8StringEncoding error:nil];

2.拆分字符串(类似。net 中的)split(‘,’)
NSArray *array=[content componentsSeparatedByString:@”\n”];

3.遍历集合 类似 foreacrch
for(NSString *line in array)
{
NSLog(@”%@”,line);
}
4.文件操作类 单例
NSFileManager *msFile=[NSFileManager defaultManager];

5.判断文件是否存在

BOOL dir=NO;
//&作为将值类型作为引用类型传入内存地址,类似java 的 ref(才会直接改变dir 的值)

BOOL exist=[msFile fileExistsAtPath:path isDirectory:&dir];

6.文件类型过滤类
NSString *extenstring=[path pathExtension];
if(![extenstring isEqualToString:@”h”] && ![extenstring isEqualToString:@”m”] && ![extenstring isEqualToString:@”c”])

7.拼接字符串方法 stringWithFormat
NSString *filepath=[NSString stringWithFormat:@”%@/%@”,path,fileName];

8.找到某个字符串对象的位置
NSRange range=[path rangeOfString:@”1212”];

9.把某个字符串的位置替换为另外的字符串
NSString *str=[path stringByReplacingCharactersInRange:range withString:@”“];

10.可变素组,对应Array
NSMutableArray *array=[NSMutableArray arrayWithObjects:@”1”,@”2”,@”3”,nil];
NSArray *arry=@[@”1”,@”q”] 只创建不可变素组可用

  1. 集合
    1.相同点 NSSet NSArray 都是集合都能存放多个OC对象
    只能存放OC对象, 不能存在非OC 对象
    都有一个可变的子类
    不同点
    NSSet 无序 NSArray 有序

NSMutableSet *dset=[NSMutableSet set]; 可变集合
NSArray 集合

  1. 字典集合

NSMutableDictionary 可变 无序
NSDictionary *dict=@{@”name”:@”chekq”,@”address”:@”北京”};
id obj=dict[@”name”];

不可变的数组不可以传给可变数组
.字典中的值不可重复
NSMutableDictionary *nsDict=[NSMutableDictionary dictionary];
[nsDict setObject:@”1” forKeyedSubscript:@”123”]

NSArray *persons=@[
   @{@"nname":@"javk",@"qq":@"1217276730"},
   @{@"nname2":@"javk1",@"qq":@"12172767301"},
   @{@"nname3":@"javk2",@"qq":@"12172767302"},
   @{@"nnam4":@"javk3",@"qq":@"12172767303"}
 ];

/*
 NSArray /NSMutableArray
 有序
 快速创建(不可变):@[]
 快速访问:素组名[i]

 NSSet /NSMutableSet
 无序

 NSDictionary/  NSMutableDictionary
 无序
 快速创建:{key:value,key:value}
 快速访问: 字典名[key]

@20 将包装成一个NSNumber 对象

因为NSNumber 之所以包装基础数据类型,
是因为继承了NSValue

1.OBJECT 语法加强
//封源的,看不到源代码
Foundation 框架(苹果提供)
NSObject 所有类的基类 NSString
NSlog(“%@”,)
//拼接字符串
[NSString stringWithFormat:@”%@,%@”,@”1”,@”2”]

1>如何获取字符串
NSString *str=@”12345”;
NSUInteger length=[str Length];
NSLog(@”字符串长度 %lu”,length)

2>根据索引获得单个字符串
NSString *str2=@”www.itcast.cn”;
如果你给定的字符串长度,会导致异常 Range or index out of founds
unichar c=[str2 characterAtIndex:5];
NSLog(@”获得字符 %c”,c);

3>根据索引获得一个子字符串
NSString str3=@”www.itcast.cn”;
//subsringFromIndex 给定的索引开始 (包含该索引位置的开始)
//substringToIndex 截取字符串到给定的索引位置介绍(不包含该索引位置)
NSString *tempStr=[str3 substringFromIndex:3]; //.itcast.cn
NSString *tempStr=[str3 substringFromIndex:3];//www
4>根据字符串获得该字符串在另一个字符串的索引的位置
5>根据字符串获得字符串的范围
6>截取字符串的某一段
NSRange rang={1,2};
/【起始索引位置 包含该索引 】location 索引的位子 length 要截取的长度
NSString *tempStr3=[str3 substringWithRange: rang];
7//获得一个字符串的索引位置
NSString *tempStr=@”itcast”;
NSString *str4=@”www.itcast.cn”;
NSRange tempRange=[str3 rangeOfString:str4];
NSLog(@”location=%d,length=%d”, tempRange.location, tempRange.length);
//NSStringFromRange可以吧结构体转换成字符串
NSLog(@”%@”,NSStringFromRange(tempRange))
if(tempRange.location==NSNotFound)//没有找到
8:获得一个字符串所有范围

字符串的判断
1.判断字符串是否为null

基本数据类型转换成字符串
int​ 转换成字符串
int a=0;
NSString *str1=[NSString stringWithFormat:@”%d”,a];

float f=2.4;
NSString *str2=[NSString stringWithFormat:@”%.lf”,f];

double d=78.123
NSString str3=[NSString stringWithFormat:@”%.4f”,d]

char c=’c’;
NSString str4=[NSString stringWithFormat:@”%c”,c];

NSString *str6=@”1”;
int i1=[str6 intValue];

NSString *str7=@”2.3”;
float fl=[str7 floatValue];
NSLog(@”fl %.lf”,f1);

NSString *str8=@”8.88”;
double d1=[str8 doubleValue];
NSLog(@”d1 %.2f”,d1);

NSString *str9=@”i268”;
int i2=[str9 intValue];

NSString *str10=@”china”;
NSString *temp1=[str10 uppercaseString];//转换成大写

-字符串重组
//1.多个数据拼接成一个字符串
int year = 1988;
int month = 4;
int day = 15;
NSString * date = [NSString stringWithFormat:@”%d年%d月%d日”,year,month,day];
NSLog(@”date %@”,date);
NSString * address = @”昌平区,金燕龙”;
NSString * dateAndAddrss = [NSString stringWithFormat:@”%@地址:%@”,date,address];
NSLog(@”dateAndAddress %@”,dateAndAddrss);

    //2.字符串的末尾追加新的字符
    NSString * str1 = @"www.";
    NSString * str2 = [str1 stringByAppendingString:@"itcast.cn"];
    NSLog(@"str2 %@ str1 %@",str2,str1);

    //3.在制定的范围追加字符串
    NSString * str3 = @"www.cn";
    NSRange range = {4,0};
    // 4 location代表的时从哪个索引开始插入,length 代表的意思可以覆盖几个字符
    NSString * str4 = [str3 stringByReplacingCharactersInRange:range withString:@"itcast."];
    NSLog(@"str4 %@",str4);

    //4.使用新的字符,替换原有的字符
    NSString * str5 = @"www.itcast.cn";
    NSString * str6 = [str5 stringByReplacingOccurrencesOfString:@"w" withString:@"a"];
    NSLog(@"str6 %@",str6);

    //5.在字符串中删除特定的某些字符 胡汉三 hhs
    NSString * str7 = @"www---.itcatst.--cn";
    NSString * str8 = [str7 stringByReplacingOccurrencesOfString:@"-" withString:@""];
    NSLog(@"str8 %@",str8);

    //6.去掉字符串中的空格
    NSString * str9 = @"www  .itcat  .cn";
    NSString * str10 = [str9 stringByReplacingOccurrencesOfString:@" " withString:@""];
    NSLog(@"str10 %@",str10);

//将字符串写入到文件
NSString * content = @”浙江冰雹,如汤圆大小,习近平万岁”;
NSString * path = @”/Users/aplle/Desktop/共享课堂/mytest.txt”;
//1.参数1 要给入文件目录(并且要包括文件名称)
//2.atomically : YES
//3.NSUTF8StringEncoding 国际通用的编码格式
//4.NSError 是用来记录错误信息的
NSError * error;
BOOL isWriteSuccess = [content writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];

    if(isWriteSuccess)
    {
        NSLog(@"文件创建成功");
    }
    else
    {
        NSLog(@"error %@",error);
    }

//要给出文件路径
//你写入文件的时候,使用的是什么编码格式,读取的时候就要给我用什么编码格式
NSString * path = @”/Users/aplle/Desktop/共享课堂/mytest.txt”;
NSError * error;
NSString * str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];

    if (error != nil)   {
        NSLog(@"error message %@",error);
    }
    else   {
        NSLog(@"str content %@",str);
    }

/*
NSString * str = @”abc”;
NSString * str2 = [str stringByAppendingString:@”bbc”];

    NSLog(@"str2 %@ str %@",str2,str);
    str = @"abcbbc";
    */

    //1.创建可变字符串
    //NSMutableString 继承自 NSString
    //NSMutableString 用油NSString所有的属性以及方法

// NSMutableString * muStr = [[NSMutableString alloc] init];
NSMutableString * muStr = [[NSMutableString alloc] initWithCapacity:0];
//是初始化字符串内容
[muStr setString:@”www”];
NSLog(@”mustr %p”,muStr);
//动态的给字符串末尾追加新值
[muStr appendString:@”.cn”];

    //在指定的索引位置,插入字符串
    [muStr insertString:@".itcast" atIndex:3];

    //删除指定范围的字符串
    //你要删除的长度,一定不能够超出字符串的的长度,导致异常Range or index out of bounds
    NSRange range = {3,7};

// [muStr deleteCharactersInRange:range];
[muStr replaceCharactersInRange:range withString:@”传智播客”];
NSLog(@”muStr %@”,muStr);

//1.创建一个NSRange结构体 表示范围
NSRange range = {4,5};
NSRange range2 = NSMakeRange(4, 5);
NSString * strRange = NSStringFromRange(range);
NSLog(@”strRange %@”,strRange);

    //2.NSSize 等同于 CGSize 有两个值组成 weight表示宽度 height高度
    NSSize  size = {21,19};
    NSSize  size2 = NSMakeSize(21, 19);
    NSString *strSize =  NSStringFromSize(size2);
    NSLog(@"strSize %@",strSize);

//3.NSPoint 等同CGPoint 表示一个点的坐标位置
NSPoint point = {20,40};
NSPoint point2 = NSMakePoint(20, 40);
NSString * strPoint = NSStringFromPoint(point);
NSLog(@”strPoint %@”,strPoint);

//4.NSRect
NSRect rect = {40,60,100,200};
NSRect rect2 = NSMakeRect(0, 10, 100, 100);
NSString * strRect = NSStringFromRect(rect);
NSLog(@”strRect %@”,strRect);
/集合中,不能存储基本数据类型,如果你想要把基本数据类型存储到数组,集合中,就必须把它转换成基本数据类型的包装类
@autoreleasepool {
//int float double char
int a = 10;
// [NSString stringWithFormat:@”%d”,a];

    //1.使用NSNumber 包装  int数据类型
    NSNumber * number1 = [NSNumber numberWithInt:a];
    NSLog(@"%@",number1);

    //2.直接转换成字符串
    NSString * strInt = [number1 stringValue];
    NSLog(@"strInt %@",strInt);

    //3.float包装成NSNumber
    NSNumber * number2 = [NSNumber numberWithFloat:98.98];
    NSLog(@"number2 %@",[number2 stringValue]);

    //4.包装类转换成基本数据类型
    int b  = [number1 intValue];
    NSLog(@"%d",b); 

   //1.创建集合
        //NSArray 是不可变数组,一旦创建完成就不能够对数组进行,添加,删除等操作
        NSArray * array = [[NSArray alloc] init]; 
        NSLog(@"%@",array); 

        //2.通过构造方法的方式创建一个NSArray
        //在创建一个NSArray的时候,集合的最后一个元素一定是nil
        NSArray * array1 = [NSArray arrayWithObjects:@"one",@"two",@"three", nil];
        NSLog(@"%@",array1);

        //3.数组中可以存储不同类型的对象
        NSNumber * number = [NSNumber numberWithInt:10];
        NSArray * array2 = [[NSArray alloc] initWithObjects:@"one",@"two",number, nil];
        NSLog(@"array2  %@",array2);

        //4.数组实际上存储的时对象的地址,同样也可以存储数组的地址
        NSArray * a1 = [[NSArray alloc] initWithObjects:@"one",@"two",@"three", nil];
        NSArray * a2 = [[NSArray alloc] initWithObjects:@"1",@"2",@"3", nil];
        NSArray * a3 = [[NSArray alloc] initWithObjects:a1,a2, nil];

        NSLog(@"a3 %@",a3);

        //5.存储自定义的对象
        //最好都给我重写 description方法
        Person * p1 = [[Person alloc] initWithName:@"xiaozhe" andAge:20];
        Person * p2 = [[Person alloc] initWithName:@"hell" andAge:18];
        Person * p3 = [[Person alloc] initWithName:@"marray" andAge:38];

        NSArray * array3 = [[NSArray alloc] initWithObjects:p1,p2,p3, nil];
        NSLog(@"array3  %@",array3);

        //6.数组中存储基本数据类型,
        //如果你要在数组中存储基本数据类型,请给我包装好了之后在去存 NSNumber
        //注意不要把nil值存储到NSArray中,会导致数据丢失
        NSString * str = nil;
        NSArray * array4 = [[NSArray alloc] initWithObjects:@"2",str,[NSNumber numberWithInt:23], nil];
        NSLog(@"array4 %@",array4);

        //7.创建数组的快捷方式
        NSArray * karray = @[@"a",@"b",@"c"];
        NSLog(@"karray %@",karray);

        //8.快速获得一个数组中的元素
        NSString * kstr = karray[0];
        NSLog(@"kstr %@",kstr);
    }

pragma mark 从集合中取出对象

    {
        //9.从集合中取出数据
        NSArray * array = [[NSArray alloc] initWithObjects:@"one",@"two",@"three", nil];
        //数组的index时从0开始的
        NSString * str = [array objectAtIndex:0];
        NSLog(@"str %@",str);
        //10.获得数组的元素个数
        NSUInteger arrayCount = [array count];
        NSLog(@"arrayCount %d",arrayCount);
    }

pragma mark 判断数组中是否存在某个对象

    {
        Person * p1 = [[Person alloc] initWithName:@"xiaozhe" andAge:20];
        Person * p2 = [[Person alloc] initWithName:@"nihao" andAge:30];
        NSArray * array = @[p1,p2];
        BOOL isContain = [array containsObject:p1];
        if (isContain)
        {  NSLog(@"存在");
        }else { NSLog(@"不存在");
        }
    }

//1.使用for循环遍历数组
NSArray * array = @[@”one”,@”two”,@”three”];
for (int i = 0; i < array.count; i++) {
NSString * str = array[i];
NSLog(@”array[%d] = %@”,i,str);
}

    //1.数据类型
    //BOOL id NSObject * (NSString * NSArray *) block SEL
    //2.流程控制语句
    // 增强for循环
    /*
    for (NSObject * obj in array)
    {

    }
     */
    //你的array.count值是多少,他就会循环多少次,每一次都取出数据中的一个元素
    //存储到str中
    //2.使用增强for循环的方式遍历数组
    for (NSString * str in array)  {
        NSLog(@"str = %@",str);
    } 

    //3.注意事项
    //如果你的数组中村粗了多种不同类型的数据,那么最好不要调用某个对象特有的方法,会导致程序崩溃
    //在实际的开发中,一个数组往往只负责存储一种数据类型
    Person * p1 = [[Person alloc] init];
    NSArray * array2 = @[@"one",[NSNumber numberWithInt:10],p1];

    for (NSString * str in array2)    {

// NSLog(@”array2 str %@”,str);
// NSLog(@”str %ld”,str.length);
}

    //3.枚举器
    NSArray * array3 = @[@"one",@"two",@"three"]; 
    NSEnumerator * enumerateor =  [array3 objectEnumerator]; 
    NSString * value; 
    while (value = [enumerateor nextObject]) {
        NSLog(@"enum str %@",value);
    }

//1.使用sortedArrayUsingSelector
//也是最简单的排序方式
//数组是按照你存入元素的顺序存储的
NSArray * array = @[@”b”,@”d”,@”a”,@”z”];
NSLog(@”排序前 array %@”,array);
array = [array sortedArrayUsingSelector:@selector(compare:)];
// NSArray * array1 = [array sortedArrayUsingSelector:@selector(compare:)];
NSLog(@”排序后 array %@”,array);

    //2.使用block方式排序
    NSArray * array2 = @[@"z",@"4",@"b",@"3",@"x"]; 
    NSLog(@"array2 排序前 %@",array2);
    array2 = [array2 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
        /*
        NSComparisonResult retuslt = [obj1 compare:obj2]; 
        return retuslt;
         */
        //obj1 compare obj2 就是正序排序

// return [obj1 compare:obj2];
//obj2 compare obj1 就是倒序排序
return [obj2 compare:obj1];
}];
NSLog(@”array2 排序后 %@”,array2);

    Person * p1 = [[Person alloc] initWithName:@"xiaozhe" andAge:20 andYear:@"1990"];
    Person * p2 = [[Person alloc] initWithName:@"alex" andAge:18 andYear:@"2990"];
    Person * p3 = [[Person alloc] initWithName:@"merry" andAge:25 andYear:@"1890"];

    NSArray * array3 = @[p1,p2,p3];
    NSLog(@"array3 排序前 %@",array3);

    //3.使用 给数组排序
    //如果你向给你自己定义的对象排序,必须根据某一个属性来排序,
    //sortDescriptorWithKey 参数要的就是你对象中,要依据哪个属性来排序,你就把哪个属性的名字当成key传入
    //ascending YES表示正序 NO表示倒叙
    NSSortDescriptor * d1 = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];
    NSSortDescriptor * d2 = [NSSortDescriptor sortDescriptorWithKey:@"year" ascending:NO];

    //如果你要使用多个属性进行排序,默认在前面的NSSortDescriptor优先级比较高
    NSArray * descripts = @[d2,d1]; 
    array3 = [array3 sortedArrayUsingDescriptors:descripts]; 
    NSLog(@"array 3 排序后  %@",array3); 

    //4. 
    NSArray * array4 = @[p1,p2,p3];
    NSLog(@"array4 排序前 %@",array4);
    array4 = [array4 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
        Person * p1 = obj1;
        Person * p2 = obj2;
        return [p1.year compare:p2.year];
    }];
    NSLog(@"array4 排序后 %@",array4);
}

// 可变数组
//NSMutableArray 继承至 NSArray
// NSArray * array = @[];
//1.创建可变数组
NSMutableArray * array = [[NSMutableArray alloc] initWithCapacity:0];

    //使用addObject 动态给数组中增加元素
    /*
    [array addObject:@"one"];
    [array addObject:@"two"];
    [array addObject:@"three"];
    [array addObject:@"one"];
     */
    NSString * str1 = @"one";
    NSString * str2 = @"two";
    NSString * str3 = @"three";

    //数组中可以存储,同一个对象多次
    [array addObject:str1];
    [array addObject:str2];
    [array addObject:str3];
    [array addObject:str1];

    //2.指定对象插入的位置
    [array insertObject:str1 atIndex:2];

    //3.删除 会通过对象,删除数组中所有的同一个地址的对象
    [array removeObject:str1];

    //4.通过索引的方式删除对象,超出了数组的count值,那么就会导致异常 index beyond bounds
    [array removeObjectAtIndex:0];
    [array addObject:str2];
    [array addObject:str3];
    [array addObject:str1];

    //5.删除数组中所有的元素
    [array removeAllObjects];
    NSLog(@"array %@",array);
    [array addObject:str2];
    [array addObject:str3];
    [array addObject:str1];

    //1.for换遍历
    for (int i = 0; i < array.count; i++){
        NSString * str = [array objectAtIndex:i];
        //在遍历数组的时候,千万不要给数组中,增加,或者删除元素

// [array removeObject:str1];
NSLog(@”str %@”,str);
}
//2.增强for循环
for (NSString * str in array) {
// [array removeObject:str1];
//如果你在增强for循环中,删除元素,会直接导致异常出现
NSLog(@”str %@”,str);
}
//3.枚举器
NSEnumerator * enumerator = [array objectEnumerator];
NSString * value;
while (value = [enumerator nextObject]) {
//如果你在枚举器中,删除元素,会直接导致异常出现
// [array removeObject:str1];
NSLog(@”str %@”,value);
}

    //4.要通过遍历的方式确定删除哪个元素怎么办
    NSMutableArray * array2 = [[NSMutableArray alloc] init];
    [array2 addObject:@"1"];
    [array2 addObject:@"2"];
    [array2 addObject:@"3"];
    [array2 addObject:@"4"];
    [array2 addObject:@"5"];
    NSMutableArray * tmp = [[NSMutableArray alloc] init];
    for (NSString * str in array2)  {
        if ([str isEqualToString:@"3"]) {
            [tmp addObject:str];
        }
    }
    NSLog(@"array2 %@",array2);
    NSLog(@"tmp %@",tmp);

    //遍历临时数组
    for (int i = 0; i < tmp.count; i++)  {
        NSString * str = [tmp objectAtIndex:i];
        //从原数组中删除,临时数组中存储的对象
        [array2 removeObject:str];
    }

————不可变字典
//1.创建字段,不可变的
NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:@”xiaozhe”,@”name”, nil];
NSLog(@”dic %@”,dic);

    //2.快捷创建方式
    NSDictionary * dic2 = @{ @"one":@"1",@"two":@"2"};
    NSLog(@"dic2 %@",dic2);

    //3.字典中可以存任意数据类型
    // 字典的顺序不是自然顺序
    NSArray * array = @[@"one",@"two"];
    NSDictionary * dic3 = @{
                            @"one":@"1",
                            @"num":[NSNumber numberWithInt:10],
                            @"aaa":dic2,
                            @"bbb":dic,
                            @"ar1":array   };

    NSLog(@"dic3 %@",dic3);

    //4.获得字典的长度
    NSLog(@"count %ld",dic3.count);

    //5.从字典中取值 
    NSString * str  = [dic3 objectForKey:@"one"];
    NSLog(@"str %@",str);

    NSDictionary * dicTmp = [dic3 objectForKey:@"aaa"];
    NSLog(@"dicTmp %@",dicTmp);
    NSArray * arrayTmp = [dic3 objectForKey:@"ar1"];
    NSLog(@"arrayTmp %@",arrayTmp);

     //6.遍历 
    //取出所有的key值
    NSArray * allkeys = [dic3 allKeys];
    NSLog(@"allkeys %@",allkeys); 
    for (int i = 0; i < allkeys.count; i++) {
        NSString * key = [allkeys objectAtIndex:i]; 
        //如果你的字典中存储的多种不同的类型,那么最好用id类型去接受它
        id obj  = [dic3 objectForKey:key];
        NSLog(@"obj %@",obj);
    }

    //2.枚举器 
    NSEnumerator * enumerator =  [dic3 objectEnumerator]; 
    id value;
    while (value = [enumerator nextObject]) {
        NSLog(@"value %@",value);
    } 

–可变字典
//1.创建一个可变长度字典
NSMutableDictionary * muDic = [[NSMutableDictionary alloc] initWithCapacity:0];
//2.向字典中村如数据
[muDic setObject:@”1” forKey:@”one”];
[muDic setObject:@”2” forKey:@”two”];
[muDic setObject:@”3” forKey:@”three”];
NSLog(@”muDic %@”,muDic);

    //3.删除
    [muDic removeObjectForKey:@"one"]; 
    NSLog(@"muDic %@",muDic); 

    //4.全部删除
    [muDic removeAllObjects]; 
    NSLog(@"muDic %@",muDic);  
    Student * stu1 = [[Student alloc] initWithName:@"xiaoher" andAge:20];
    Student * stu2 = [[Student alloc] initWithName:@"alex" andAge:50];
    Student * stu3 = [[Student alloc] initWithName:@"xiaoli" andAge:10];

    [muDic setObject:stu1 forKey:@"s1"];
    [muDic setObject:stu2 forKey:@"s2"];
    [muDic setObject:stu3 forKey:@"s3"];

    //在向字典中存储数据的时候,一定要保证key值是唯一的

// [muDic setObject:stu3 forKey:@”s3”];
// [muDic setObject:stu3 forKey:@”s3”];
// [muDic setObject:stu3 forKey:@”s3”];
NSLog(@”muDic %@”,muDic);

    //1.使用for循环遍历字典
    NSArray * allkeys = [muDic allKeys];
    for (int i = 0; i < allkeys.count; i++)   {
        NSString * key = [allkeys objectAtIndex:i];
        Student * stu = [muDic objectForKey:key];
        NSLog(@"stu %@",stu);
    };  
    //2.使用枚举器 
    NSEnumerator * enumerator = [muDic objectEnumerator];
    Student * tmp;
    while (tmp = [enumerator nextObject]) {
        NSLog(@"tmp %@",tmp);
    }

—NSSet
/NSArray 自然顺序
//NSSet是无序的
//注意:这个是最为重要的功能 NSSet中不能够存储重复的数据,可以用它来去除重复的值
NSString * str1 = @”one”;
NSString * str2 = @”two”;
NSString * str3 = @”three”;
NSSet * set = [[NSSet alloc] initWithObjects:str1,str2,str3,str1, nil];
NSLog(@”set %@”,set);

    NSLog(@"count %ld",set.count);
   BOOL isContains =  [set containsObject:str1];
    if (isContains){
        NSLog(@"YES");
    }
    else {
        NSLog(@"NO");
    }

    //4.遍历
    NSEnumerator * enumerator = [set objectEnumerator];
    NSString * value;
    while (value = [enumerator nextObject]) {
        NSLog(@"value %@",value);
    }

//1 创建一个可变集合—-可变集合
NSMutableSet * muSet = [[NSMutableSet alloc] init];
//2.增加值
[muSet addObject:str1];
[muSet addObject:str2];
NSLog(@”muSet %@”,muSet);
//3.删除
[muSet removeObject:str1];
NSLog(@”muSet %@”,muSet);
//4.删除所有
// [muSet removeAllObjects];

    NSLog(@"muSet %@",muSet);
    //5.遍历
    NSEnumerator * en = [muSet objectEnumerator];
    NSString * value;
    while (value = [en nextObject]) {
        NSLog(@"value %@",value);
    }

//1.NSArray 转换成 NSMutableArray
NSArray * array = @[@”one”,@”two”,@”three”];
NSMutableArray * muArray = [NSMutableArray arrayWithArray:array];
NSLog(@”muarray %@”,muArray);

    //2.NSDictonary 转换成        NSMutableDictionary
    NSDictionary * dic = @{@"one":@"1",@"two":@"2"};
    NSMutableDictionary * muDic = [NSMutableDictionary dictionaryWithDictionary:dic];
    NSLog(@"mudic %@ ",muDic);

    //3.NSset 转换成 NSMutableSet
    NSSet * set = [[NSSet alloc] initWithObjects:@"one",@"two", nil];
    NSMutableSet *muSet = [NSMutableSet setWithSet:set];
    NSLog(@"muSet %@",muSet); 

    //4.NSArray 转换成NSSet
    NSMutableSet * muSet2 = [NSMutableSet setWithArray:array];
    NSLog(@"muSet2 %@",muSet2);

    //5.NSDictionary 转化成NSArray
    NSArray * allkeys = [dic allKeys];
    NSLog(@"allkeys %@",allkeys);
    NSArray * allValues = [dic allValues];
    NSLog(@"allValues %@",allValues);

    //6.字符串转换成数组
    NSString * str = @"www.itacast.cn";
    NSArray * strArray =        [str componentsSeparatedByString:@"."];
    NSLog(@"strArray %@",strArray);

—集合内存管理
// retainCount 1
Person * p = [[Person alloc] init];
//1
NSMutableArray * array = [[NSMutableArray alloc] initWithCapacity:0];
//当你把对象存入到,数组中的时候,数组会对这个对象进行一次 retain操作
[array addObject:p];// [p retain] retaiCount 2
//当你把一个对象移除数组中的时候,会对该对象进行一次 release操作 retainCount 1
// [array removeObject:p];
//会对数组中所有的对象,进行一次,relsease操作
// [array removeAllObjects];
//当集合对象被销毁的时候,会对其内部所有的对象进行一次 release操作
//0
[array release];
//retainCount - 0
//0
[p release];

13-ARC机制集合内存管理
//ARC机制,是否需要担心内存溢出呢
//谁告诉你不用的心得啊:道理就是下面的示
Person * p = [[Person alloc] init];
NSMutableArray * array = [[NSMutableArray alloc] init];
//当一个对象被存入集合中的时候,默认会保存它的强指针
[array addObject:p];
//当个把一个对象从集合中,删除的时候,会释放掉这个对象的强指针
// [array removeObject:p];
// [array removeAllObjects];
array = nil;
p = nil;
NSLog(@”adfasdf”);

//1.文件管理器
NSFileManager * f1 = [NSFileManager defaultManager];
NSLog(@”%p”,f1);

    NSFileManager * f2 = [NSFileManager defaultManager];
    NSLog(@"%p",f2);

    NSFileManager * f3 = [[NSFileManager alloc] init];
    NSLog(@"f3 %p",f3);

    NSFileManager * f4 = [NSFileManager defaultManager];
    NSLog(@"%p",f4);

    //在整个程序没有退出之前,只需要创建一次,我们就可以把它写成单利模式
    //简单的单例模式
    User * u1 = [User defaultUser];
    u1.age = 10;
    NSLog(@"u1 %p",u1);

    User * u2 = [User defaultUser];
    NSLog(@"u2 %p age = %d",u2,u2.age);
    User * u3 = [[User alloc] init];
    NSLog(@"u3 %p",u3);

    //1.组合模式,(聚合模式)
    //2.单利模式
    //3.策略模式(封装变化点),block
    //4.向上抽象 (protocol(协议))
    //5.享元设计模式(NSString池原理)

//静态变量,整个程序运行完成的时候才会被释放掉,mian函数运行完成

static User * instance = nil;
+ (User *)defaultUser {
// return [[self alloc] init];
if (instance == nil) {
instance = [[self alloc] init];
}
return instance;
}

  NSString * str = @"www.itcast.cn";
    NSError * error;
    BOOL isWriteSuccess = [str writeToFile:@"/Users/aplle/Desktop/test.txt" atomically:YES encoding:NSUTF8StringEncoding error:&error];
    if (isWriteSuccess) {
        NSLog(@"创建成功");
    } else  {
        NSLog(@"error %@",error);
    }
     */ 
    //1.获取文件管理器
    NSFileManager * fileManager = [NSFileManager defaultManager];
    NSString * path = @"/Users/aplle/Desktop/test.txt";
    NSError * error;
    NSDictionary * dic = [fileManager attributesOfItemAtPath:path error:&error]; 
    NSLog(@"dic %@",dic); 
    if (error == nil)   {
       NSDate * date = [dic objectForKey:NSFileCreationDate];
        NSString * size = [dic objectForKey:NSFileSize];
        NSLog(@" date = %@, size = %@",date,size);
    }
}

获取目录文件以及目录列表
/*
//1.
NSFileManager * fileManager = [NSFileManager defaultManager];
NSString * path = @”/Users/aplle/Desktop/装机”;
NSError * error;

    //只能够火的目标目录下,第一级目录
    NSArray * array = [fileManager contentsOfDirectoryAtPath:path error:&error];
    NSLog(@"array %@",array);
    */ 
    NSFileManager * fileManager = [NSFileManager defaultManager];
    NSString * path = @"/Users/aplle/Desktop/other";
    NSError * error;
    //能够逐级的获得所有子集的目录
    NSArray * array = [fileManager subpathsOfDirectoryAtPath:path error:&error];
    NSLog(@"array %@",array);

目录管理
//1 创建目录
NSFileManager * fileManager = [NSFileManager defaultManager];
NSString * path = @”/Users/aplle/Desktop/myfolder/aaa”;
NSError * error;

    //withIntermediateDirectories YES 逐级创建文件夹,NO表示只能够创建一级目录 
    BOOL isCreateSuccess = [fileManager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&error];
    if (isCreateSuccess)  {
        NSLog(@"创建成功");
    }   else  {
        NSLog(@"error %@",error);
    }
    */ 
    //2 移动目录 移动就是剪切操作
    /*
    NSFileManager * fileManager = [NSFileManager defaultManager];
    NSString * path = @"/Users/aplle/Desktop/myfolder";
    NSString * pathTo = @"/Users/aplle/Desktop/newmyfolder";
    NSError * error ;
    BOOL isMoveSuccess = [fileManager moveItemAtPath:path toPath:pathTo error:&error];
    if (isMoveSuccess) {
        NSLog(@"移动成功");
    }
    else {
        NSLog(@"error %@",error);
    }
     */ 
    //3.删除
    /*
    NSFileManager * fileManager = [NSFileManager defaultManager];
    NSString * path = @"/Users/aplle/Desktop/newmyfolder";
    NSError * error;
    BOOL isRemoveSuccess = [fileManager removeItemAtPath:path error:&error];
    if (isRemoveSuccess)  {
        NSLog(@"删除成功");
    }
    else {
        NSLog(@"erro %@",error);
    }
     */ 
    //4.拷贝文件
    NSFileManager * fileManager = [NSFileManager defaultManager];
    NSString * path = @"/Users/aplle/Desktop/myfolder";
    NSString * pathTo = @"/Users/aplle/Desktop/newmyfolder";
    NSError * error;
    BOOL isCopySuccess = [fileManager copyItemAtPath:path toPath:pathTo error:&error];
    if(isCopySuccess) {
        NSLog(@"拷贝成功");
    }
    else  {
        NSLog(@"error %@",error);
    }

14-管理文件 NSData
//1.获得文件
//mp3.mp4 rmvb mkv pdf doc txt
/*
NSString * path = @”/Users/aplle/Desktop/屏幕快照 .png”;
NSData * data = [NSData dataWithContentsOfFile:path];
NSLog(@”%ld”,data.length);

    NSFileManager * fileManager = [NSFileManager defaultManager];
    NSString * pathTo = @"/Users/aplle/Desktop/屏幕快照副本.png";

   BOOL isCreateSuccess =  [fileManager createFileAtPath:pathTo contents:data attributes:nil]; 
    if (isCreateSuccess)   {
        NSLog(@"创建成功");
    }
    else {
        NSLog(@"创建失败");
    }
     */ 
    /*
    //2.移动文件 相当于剪切操作
    NSFileManager * fileManager  = [NSFileManager defaultManager];
    NSString * path  = @"/Users/aplle/Desktop/屏幕快照 .png";
    NSString * pathTo = @"/Users/aplle/Desktop/newmyfolder/屏幕屏幕.png";
    NSError * error;
    BOOL ismoveSuccess = [fileManager moveItemAtPath:path toPath:pathTo error:&error];
    if (ismoveSuccess)  {
        NSLog(@"移动成功");
    }
    else {
        NSLog(@"error %@",error);
    }
    */

    NSFileManager * fileManager  = [NSFileManager defaultManager];
    NSString * path  = @"/Users/aplle/Desktop/屏幕快照副本.png";
    NSError * error;
    BOOL isremove = [fileManager removeItemAtPath:path error:&error];
    if (isremove) {
        NSLog(@"删除成功");
    }
    else {
        NSLog(@"error %@",error);
    }

NSData数据类
//音频文件,文本文件,视频文件就必须使用NSData数据类
/*
NSString * str = @”www.itcast.cn”;
NSError * error;
[str writeToFile:@”/Users/aplle/Desktop/text.txt” atomically:YES encoding:NSUTF8StringEncoding error:&error];
*/
/*
NSString * path = @”/Users/aplle/Desktop/text.txt”;
//把目标文件加载到内存中.
//NSData 是不可变长度的Data类型,只能够通过一次加载完成所有的数据
NSData * data = [NSData dataWithContentsOfFile:path];

    NSLog(@"data length %ld",data.length);
    NSString * pathTo = @"/Users/aplle/Desktop/nextext.txt";
    //把加载到内存中的文件,写入到指定的位置
    BOOL isWriteSuccess = [data writeToFile:pathTo atomically:YES];

    if (isWriteSuccess)   {
        NSLog(@"写入成功");
    }
    else    {
        NSLog(@"写入失败");
    }
      */

    //当需要把多个NSData数据拼接成一个数据存储的时候,就要想到使用NSMutableData这个类型
    NSString * str1 = @"好好学习";
    NSString * str2 = @"天天向上";
    NSString * str3 = @"今天休息";

    NSMutableData * muData = [[NSMutableData alloc] init];

    NSData * d1 = [str1 dataUsingEncoding:NSUTF8StringEncoding];
    NSData * d2 = [str2 dataUsingEncoding:NSUTF8StringEncoding];
    NSData * d3 = [str3 dataUsingEncoding:NSUTF8StringEncoding];

    //appendData 能够把nsdata对象加入到 muData对象中
    [muData appendData:d1];
    [muData appendData:d2];
    [muData appendData:d3];

    NSString * path = @"/Users/aplle/Desktop/传智播客校训.txt";
    //NSMutableData是继承至NSData的所以可以调用writeToFile 把数据写入到一个指定的目录下
    BOOL iswriteSucess = [muData writeToFile:path atomically:YES];
    if (iswriteSucess)  {
        NSLog(@"创建成功");
    }
    else  {
        NSLog(@"创建失败");
    }

/*格式化日期操作
NSDate * date = [NSDate date];

    //表示格式化日期对象
    NSDateFormatter * f = [[NSDateFormatter alloc] init];
    [f setDateFormat:@"yyyy-MM-dd hh:mm:ss"];//2014/03/21
    //把格式与我们的日期关联起来
    NSString * str = [f stringFromDate:date];
    NSLog(@"str %@",str);
    */

    //把字符串转换成日期
    /*
    NSString * str = @"2014/03/20";
    NSDateFormatter * f = [[NSDateFormatter alloc] init];
    [f setDateFormat:@"yyyy/MM/dd"];
    NSDate * date = [f dateFromString:str];
    NSLog(@"date %@",date);
    */
    //处理时区问题
    NSDate * newDate = [NSDate date];

    NSDateFormatter * f = [[NSDateFormatter alloc] init];
    [f setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

    NSString * str = [f stringFromDate:newDate];
    //设置时差计算方法 //GTM
    [f setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 

    NSLog(@"%@",str);
   //获得日期对象
    NSDate * date = [NSDate date];
    NSLog(@"date %@",date);

猜你喜欢

转载自blog.csdn.net/lovetltt/article/details/80976606