在论OC中foundation框架(上)

来源:互联网 发布:小额贷款app源码 编辑:程序博客网 时间:2024/05/21 03:19

 Foundation框架

    NSString 是一个不可变得字符串,它的所有产生其他字符串方法都是生成一个新的字符串。

        字符串的创建

            1、字面量(常量字符串地址是相同的,它们就是同一个)它存储在常量区中

            NSString *str = @"saas";

            NSString *str1 = @"saas"

            2、快捷的构造方法(存在堆里面)第二种的运行效率比第三种运行效率高

            NSString *str = [NSString stringWithFormat:@"dsa%d",10];

            3、初始化方法(存放在堆里面)

            NSString *str = [[NSString alloc]initWithFormat:@"adsas%d",10];

     

        字符串的获取

            1、获取字符的长度

             NSString *str = @"dasddas";

             long length = [str length];

            2、获取子串

             NSString *str = @"dasddas";

             NSString *str1 = [str substringFromIndex:3];//从第三个位置开始截取,包含索引的位置。下标是从0开始

 

             NSString *str1 = [str substringToIndex:3];//从第0个位置开始截取,到索引的位置结束。但不包含第索引的位置,下标是从0开始。

             NSRange range = NSMakeRange(2, 4);

 

             NSString *str1 = [str substringWithRange:range];//从第2个字符串的位置开始截,一共截4个字符。

             NSLog(@"%@",str1);

            3、获取某个子串所在父串的区间

             NSRange range = [str rangeOfString:@"dd"];

             if(range.location == NSNotFound){

                NSLog(@"字符串中没有这个子串");

             }

             NSLog(@"%@",NSStringFromRange(range));

 

            4、截取字符串

             NSString *str1 = @"<itheima>IT黑马</itheima>";

             NSRange range = [str1 rangeOfString:@">"];//只会与第一个匹配

             NSString *str2 = [str1 substringFromIndex:range.location+1];

             NSLog(@"%@",str2);

             NSRange range1 = [str2 rangeOfString:@"<"];

             NSString *str3 = [str2 substringToIndex:range1.location];

             NSLog(@"%@",str3);

            

            5、截取单个字符

             NSString *str = @"wsajkl";

             unichar c = [str characterAtIndex:2];

             NSLog(@"%c",c);

 

            6、字符串的判断

             NSString *str1 = @"abc";

             NSString *str2 = @"abc";

             if(str1 == str2){// == 是比较地址 | equal比较的是值

                NSLog(@"相等了");

             }

             NSString *str3 = [NSString stringWithFormat:@"abc"];

             if(str1 == str3){// == 是比较地址 | equal比较的是值

                NSLog(@"相等了");

             }else{

                NSLog(@"看到了没?");

             }

             if([str1 isEqualToString:str3]){// == 是比较地址 | equal比较的是值

                NSLog(@"相等了");

             }else{

                NSLog(@"看到了没?");

             }

 

 

            7、自定义一个比较字符串的方法

            .m

             @implementation NSString (NSString_CZ)

             - (BOOL)myIsEqual:(NSString *)other{

             //判断是否是同一个字符串

             if(self == other){

                return YES;

             }

             //如果长度不同,则内容肯定不同

             if(self.length != other.length){

                return NO;

             }

             //一个一个进行比较

             for(int i = 0 ; i < self.length ; i++){

                unichar c = [self characterAtIndex:i];

                unichar otherC = [other characterAtIndex:i];

                if(c != otherC){

                    return NO;

                }

             }

                return NO;

             }

             @end

 

 

            .h

             @interface NSString (NSString_CZ)

             - (BOOL)myIsEqual:(NSString *)other;

             @end

           main.m

             NSString *str = @"hahahaha";

             NSString *str1 = @"hahahaha";

             if([str myIsEqual:str1]){

                NSLog(@"哈哈相等了");

             }else{

                NSLog(@"我擦么相等");

             }

            

            8、判断前缀

             BOOL isHttp = [str hasPrefix:@"http://"];

             

            9、判断后缀

             BOOL isPng = [str hasSuffix:@".png"];

 

 

            10compare的用法(主要用在排序中)

             NSString *str = @"hahahaha";

             NSString *str1 = @"hahahaha";

             NSComparisonResult result = [str compare:str1];

             //   NSOrderedAscending = -1L, str < str1

             //   NSOrderedSame,   str == str1

             //   NSOrderedDescending,  str > str1

             if(result ==NSOrderedSame){

                NSLog(@"str == str1");

             }else if(result == NSOrderedDescending){

                NSLog(@"str < str1");

             }else{

                NSLog(@"str > str1");

             }

 

 ///////////////////////////////////////////////////////////////////////

             NSString *str = @"hahahaha";

             NSString *str1 = @"hahahaha";

             NSComparisonResult result =  [str compare:str1 options:NSCaseInsensitiveSearch];

             //    NSCaseInsensitiveSearch = 1, //忽略大小写

             //    NSLiteralSearch = 2,

             //    NSBackwardsSearch = 4,

             //    NSAnchoredSearch = 8,

             //    NSNumericSearch = 64,     //用于数值类型的比较

             if(result ==NSOrderedSame){

             NSLog(@"str == str1");

             }else if(result == NSOrderedDescending){

             NSLog(@"str < str1");

             }else{

             NSLog(@"str > str1");

             }

 

            11、字符串的转换

             转大写

                 NSString *str1 = @"abc";

                 NSString *str3 = [str1 uppercaseString];

            

            转小写

                 NSString *str3 = @"ABC";

                 NSString *str4 = [str3 lowercaseString];

            

            单词首字母大写

                 NSString *str2 = @"abc asdas adasd";

                 NSString *str4 = [str2 capitalizedString];

            

            基本数据类型转字符串

                 NSString *str = [NSString stringWithFormat:@"21312"];

            

            字符串转基本数据类型

                 NSString *str = @"11212";

                 int num = [str intValue];

            

            C语言字符串转换为OC字符串

                 NSString *oCString = [NSString stringWithCString:"haha" encoding:NSUTF8StringEncoding];

            

            OC的字符串转换为C语言的字符串

                 NSString *str = @"it\tcast\thaha ";

                 const char *str1 = [str cStringUsingEncoding:NSUTF8StringEncoding];

                 printf("%s",str1);

 

            字符串拼接

                 NSString *str = @"www-itheima-cn";

                 NSString *str1 = [str stringByAppendingString:@"哈哈"];

                 NSLog(@"%@",str1);

 

            字符串替换

                 NSString *str = @"www-itheima-cn";

                 NSString *str1 = [str stringByReplacingOccurrencesOfString:@"-" withString:@"."];

                 NSLog(@"%@",str1);

 

            字符串替换指定的位置

                 NSString *str = @"www-itheima-cn";

                 NSRange range = [str rangeOfString:@"itheima"];

                 NSString *str1 = [str stringByReplacingCharactersInRange:range withString:@"itcast"];

 

            字符串删除指定的位置

                 NSRange range = [str rangeOfString:@"itheima"];

                 NSString *str1 = [str stringByReplacingOccurrencesOfString:@"itheima" withString:@""];

                 NSLog(@"%@",str1);

            字符串去掉空格

                 NSString *str = @"it\tcast\thaha ";

                 NSString *str1 = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

 

            文件操作

             //获取文件路径

             NSString *path1 = [NSHomeDirectory() stringByAppendingString:@"/text.txt"];

             //获取扩展名

             //    path1 =[path1 pathExtension];

             //删除扩展名

             //    path1 = [path1 stringByDeletingPathExtension];

             //添加扩展名

             path1 = [path1 stringByAppendingPathExtension:@"jpg"];

             NSLog(@"%@",path1);

字符串与文件(只要是file就是绝对路径)

    把字符串写入文件

         NSString *str = @"德玛西亚";

         NSError *error = nil;//用来接收写入失败的内容,记住它是一个二级指针。

         BOOL isTrue =  [str writeToFile:@"/Users/jinpengyao/Desktop/lala.txt" atomically:YES encoding:NSUTF8StringEncoding error:(&error)];

         if (isTrue) {

         NSLog(@"文件写入成功");

         }else{

         NSLog(@"文件写入失败...");

         }

 

    读取文件中的内容

        NSError *error = nil;//用来接收写入失败的内容,记住它是一个二级指针。

        NSString *str1 = [NSString stringWithContentsOfFile:@"/Users/jinpengyao/Desktop/lala.txt" encoding:(NSUTF8StringEncoding) error:(&error)];

        if(error){

            NSLog(@"%@",error);

        }else{

            NSLog(@"%@",str1);

        }

 

 字符串与URLUniform Resource Locator

    URL格式:

        协议头://主机名称(ip|域名)/资源路径

      eg:http://www.itbaima.com/image/haha.png

         file:///Users/jinpengyao/Desktop/lala.txt

    file用于本机,所以它就没有主机名前面的两个//是代表协议。

 

 转换编码方式

        UTF8编码的字符串,编码称为URL中可以用的字符串

            [str stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

        URL中可用的字符串,编码称为UTF8中可以用的字符串

            [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

 

 通过URL写入文件

         NSError *error = nil;

         NSURL *url = [NSURL URLWithString:@"file:///Users/jinpengyao/Desktop/lala.txt"];

         BOOL isSuccess = [str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:(&error)];

         if (isSuccess) {

         NSLog(@"文件写入成功");

         }else{

         NSLog(@"文件写入失败...%@",error);

         }

 通过URL读取文件

     NSError *error = nil;

     NSURL *url = [NSURL URLWithString:@"file:///Users/jinpengyao/Desktop/lala.txt"];

     NSString *string = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:(&error)];

     NSLog(@"%@",string);

NSMutableString 可变字符串,它是NSString的子类

 增改删的操作

    拼接

     NSMutableString *mStr = [NSMutableString stringWithFormat:@"itbaima"];

     for (int i = 0 ; i < 20 ; i++) {

        [mStr appendString:@" itbaima"];

     }

     [mStr substringFromIndex:1];

    

    设置可以容纳多少个字符(子类扩展的方法)capacity表示容量,可以容纳多少个字符。如果字符串超过了这个存储空间,它自己会自动扩展。

        [NSMutableString stringWithCapacity:10];

 

    在指定位置加入字符串

         NSMutableString *mStr = [NSMutableString stringWithFormat:@"itbaima"];

         [mStr insertString:@"德玛西亚" atIndex:3];

         NSLog(@"%@",mStr);

 

    删除指定位置的字符串

         NSMutableString *mStr = [NSMutableString stringWithFormat:@"itbaima"];

         NSRange range = NSMakeRange(1, 3);

         [mStr deleteCharactersInRange:range];

    

    替换指定位置的字符串

         NSRange range1 = [mStr rangeOfString:@"德玛"];

         [mStr replaceCharactersInRange:range1 withString:@"www"];

     ------------------------------------------------------------------------------------------------------------

         NSRange range1 = [mStr rangeOfString:@"德玛"];

        //注意使用range的时候不要超过字符串的长度(超过会有一个越界错误)

         [mStr replaceOccurrencesOfString:@"德玛" withString:@"西亚" options:NSCaseInsensitiveSearch range:range1];

 

 

 

 

 集合类

    特点:用于存储多个OC对象,相当于存储对象的容器。只能存放OC对象不能存放基本数据类型、结构体、枚举。

    

    数组(有序的对象集合,可以存放任意的OC对象)

        特点:1、同一个数组中可以存放不同类型的对象。

             2、同一个对象可以被存入数组中多次。

             3、不能存放基本数据类型,如果硬是要存入的花需要转换成其包装类型。

             4、数组中的元素是有序的。

 

    NSArray创建:

        1、简洁的构造方法

            NSArray *arr= [NSArray array];

          快速创建法:

            NSArray *arr2 = @[@"德玛西亚",@"拉拉阿拉",@"卡卡卡卡"];

        

        2、通过对象方法取出指定元素

            NSString *string = [arr objectAtIndex:0];

           

          快捷方法

            NSString *string = arr[0];

 

        3、获取字符串长度

            long length = [arr count];// arr.count;

 

        4、判断数组中是否包含某个元素(判断是不是包含某个对象,是调用这个对象上的isEqual方法)

            BOOL isContain =  [arr2 containsObject:@"德玛西亚"];

        

        5、数组的遍历

         1、普通的for

             for(int i = 0 ; i < arr2.count ; i++ ){

                NSLog(@"%@",arr2[i]);

             }

 

         2、增强for

             for (id obj in arr2) {

                NSLog(@"%@",obj);

             }

 

         3、通过枚举器

             NSEnumerator *enumer = [arr2 objectEnumerator];

                id obj;

                while(obj = [enumer nextObject]){

                    NSLog(@"%@",obj);

                }

 

         4、通过block

             [arr2 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

              NSLog(@"%@",obj);

             }];

        

         5、让数组中的每一个元素都执行某一个方法

            [array makeObjectsPerformSelector:@selector(方法名)];

 

            [array makeObjectsPerformSelector:@selector(方法名:) withObject:传入的参数];

        

         6、数组中的排序

            1、通过selector方式进行排序

                 1、重写比较方法

                    - NSComparisonResultcompare:(id)obj{

                        if(self.属性 == obj.属性){

                                return [self.属性 compare:obj.属性];

                        }else if(){

                        return NSOrderedDescending;//降序

                        }else{

                            return NSOrderedAsscending;//升序

                        }

                    }

 

                 2、调用

                    [arr2 sortedArrayUsingSelector:@selector(比较方法)]

 

            2、通过比较器

                arr2 = [arr2 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

                    return[obj1 compare:obj2];

                 }];

            

            3、属性描述器

                 NSSortDescriptor *desc1 = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];

                 NSSortDescriptor *desc2 = [NSSortDescriptor sortDescriptorWithKey:@"key" ascending:YES];

                 arr2 = [arr2 sortedArrayUsingDescriptors:@[desc1,desc2]];

 

         7、数组与字符串

            1、字符串转数组

                 NSString *str = @"1,2,3,4,5,6";

                 //把字符串分割为数组

                 NSArray *arr = [str componentsSeparatedByString:@","];

            2、把数组拼接成字符串

                //把数组组装成字符串

                 NSString *str1 = [arr componentsJoinedByString:@"-"];

                 NSLog(@"%@",str1);

 

        8、数组与文件

          (file) 1、数组写入文件

                    NSArray *array = @[@"a",@"b",@"c",@"d"];

                    BOOL isSuccess = [array writeToFile:@"/Users/jinpengyao/Desktop/lala.txt" atomically:YES];

                 2、从文件中获取数组

                    BOOL isSuccess = NSArray *array1 = [NSArray arrayWithContentsOfFile:@"/Users/jinpengyao/Desktop/lala.txt"];

                    NSLog(@"%@",array1);

          (URL) 都一样的

                 NSURL *url = [NSURL URLWithString:@"file:///Users/jinpengyao/Desktop/lala.txt"];

                 BOOL isSuccess = [array writeToURL:url atomically:YES];

    

 

    NSMutableArray(继承与NSArray)

         //普通创建方式

         NSMutableArray *mArray = [NSMutableArray arrayWithObjects:@"1",@"2",@"3", @"4",@"1",nil];

         //创建的时候该数组可以容乃的元素个数

         NSMutableArray *mArray2 = [NSMutableArray arrayWithCapacity:10];

         //不存在快速创建方式

         //    NSMutableArray *mArray1 = @[@"a",@"b",@"c",@"d"];//错误方法,因为它是一个不可以变数组的定义

         //除非这样

         mArray2.array =@[@"a",@"b",@"c",@"d"];

         //增加指定的元素

         [mArray addObject:@"e"];

         //删除指定的元素,注意只要与指定的元素相同,都会被删除。它是通过isEqual方法进行比较的。

         [mArray removeObject:@"1"];

         //边遍历边删除(注意:不能使用增强的for,所有通过枚举器的方式都不可以在遍历的同时进行删除

         NSMutableArray *temp =[NSMutableArray array];

         for (id obj in mArray) {

            if([obj isEqualToString:@"3"]){

            [temp addObject:obj];

            }

         }

         //删除mArray中的在temp中的元素

         [mArray removeObjectsInArray:temp];

         NSLog(@"%@",mArray);

         //指定位置加入元素

         [mArray insertObject:@"s" atIndex:1];

         NSLog(@"%@",mArray);


-------------------------------------------------------------------------------------------

#import "CZPerson.h"


@implementation CZPerson

- (void)addAges{

   self.age += 1;

}

- (void)findPerson:(NSNumber *)age{

   int intAge = [age intValue];

   if(intAge == self.age ){

       NSLog(@"对我今年就是%d",intAge);

    }

}

//自定义比较器

- (NSComparisonResult)compare:(CZPerson *)other{

    if(self.age == other.age){//如果selfage等于otherage就在比较name

       return [self.namecompare:other.name];

    }elseif(self.age > other.age){//如果selfage大于otherage就让它降序

        returnNSOrderedDescending;

    }else{//如果selfage小于otherage就让它升序

        returnNSOrderedAscending;

    }

}


//如果你想NSLog(@"%@",arr);这样遍历数组,那么就乖点把这个加上。

- (NSString *)description{

    return [NSStringstringWithFormat:@"name = %@ ,age = %d",self.name , self.age];

}

@end




////    //通过枚举器遍历数组

////    NSArray *arr = @[@"a",@"b",@"c",@"d"];

////    NSEnumerator *enumerator = [arr objectEnumerator];

////    id obj = nil;

////    while(obj = [enumerator nextObject]){

////        NSLog(@"%@",obj);

////    }

////    NSLog(@"------------");

////    //通过block遍历数组

////    [arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

////        NSLog(@"%@",obj);

////    }];

//    

//    CZPerson *person1 = [[CZPerson alloc]init];

//    person1.age = 15;

//    person1.name = @"你好1";

//    CZPerson *person2 = [[CZPerson alloc]init];

//    person2.age = 14;

//    person2.name = @"你好2";

//    

//    CZPerson *person3 = [[CZPerson alloc]init];

//    person3.age = 13;

//    person3.name = @"你好3";

//    

//    CZPerson *person4 = [[CZPerson alloc]init];

//    person4.age = 12;

//    person4.name = @"你好4";

//    

//    CZPerson *person5 = [[CZPerson alloc]init];

//    person5.age = 11;

//    person5.name = @"你好5";

//    

//    NSArray *arr = @[person1,person2,person3,person4,person5];

////遍历数组

////    [arr makeObjectsPerformSelector:@selector(addAges)];

////    for (CZPerson *person in arr) {

////        NSLog(@"name = %@ , age = %d",person.name,person.age);

////    }

//    //使用枚举器变量数组

////    NSEnumerator *enumerator =[arr objectEnumerator];

////    CZPerson *person ;

////    while(person  = [enumerator nextObject] ){

////        NSLog(@"name = %@ , age = %d",person.name,person.age);

//

////    }

//    

//    

//    //通过block遍历数组,并且当碰到12岁就不遍历了//当遍历到索引值为2的时候就停止遍历

////    [arr enumerateObjectsUsingBlock:^(CZPerson *person, NSUInteger idx, BOOL *stop) {

////        NSLog(@"name = %@ , age = %d",person.name,person.age);

////          if(14 == person.age){

////              *stop = YES;

////          }

////          if(idx == 2){

////          *stop = YES;

////          }

////      }];

//    //让数组里面的所有元素都执行一下方法,

//    [arr makeObjectsPerformSelector:@selector(addAges)];

//    NSNumber *number = [NSNumber numberWithInt:15];

//        [arr enumerateObjectsUsingBlock:^(CZPerson *person, NSUInteger idx, BOOL *stop) {

//            NSLog(@"name = %@ , age = %d",person.name,person.age);

////            if(14 == person.age){

////                *stop = YES;

////            }

//            if(idx == 2){

//                *stop = YES;

//            }

//        }];

//    //让数组里面的所有元素都执行一下,并且根据传入的参数找到合适的东西。

//    [arr makeObjectsPerformSelector:@selector(findPerson:) withObject:number];


////比较器

//        CZPerson *person1 = [[CZPerson alloc]init];

//        person1.age = 15;

//        person1.name = @"你好1";

//        CZPerson *person2 = [[CZPerson alloc]init];

//        person2.age = 12;

//        person2.name = @"你好2";

//    

//        CZPerson *person3 = [[CZPerson alloc]init];

//        person3.age = 13;

//        person3.name = @"你好3";

//    

//        CZPerson *person4 = [[CZPerson alloc]init];

//        person4.age = 16;

//        person4.name = @"你好4";

//    

//        CZPerson *person5 = [[CZPerson alloc]init];

//        person5.age = 11;

//        person5.name = @"你好5";

//        NSArray *arr = @[person1,person2,person3,person4,person5];

//    //通过选择器进行排序

//    //要注意NSArray是一个不可变的数组,之后排好序需要让自己重新指一下被改的地址,不然不会发生任何变化。

////        arr = [arr sortedArrayUsingSelector:@selector(compare:)];

////        NSEnumerator *enumerator =[arr objectEnumerator];

////        CZPerson *person ;

////        while(person  = [enumerator nextObject] ){

////            NSLog(@"name = %@ , age = %d",person.name,person.age);

////    

////        }

//    //使用比较器(bock)进行排序(实质很重写比较器差不多)

////        arr = [arr sortedArrayUsingComparator:^NSComparisonResult(CZPerson *cPerson1, CZPerson *cPerson2) {

////            if(cPerson1.age == cPerson2.age){

////                return [cPerson1.name compare: cPerson2.name];

////            }else if(cPerson1.age > cPerson2.age){

////                return NSOrderedDescending;

////            }else{

////                return NSOrderedAscending;

////            }

////        }];

////        NSEnumerator *enumerator =[arr objectEnumerator];

////        CZPerson *person ;

////        while(person  = [enumerator nextObject] ){

////            NSLog(@"name = %@ , age = %d",person.name,person.age);

////            

////        }

//    //通过属性描述器进行排序

//    NSSortDescriptor *desc1 = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];

//    NSSortDescriptor *desc2 = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];

//    arr = [arr sortedArrayUsingDescriptors:@[desc1,desc2]];

////    NSEnumerator *enumerator =  [arr objectEnumerator];

////    CZPerson *person ;

////    while(person = [enumerator nextObject]){

////        NSLog(@"name = %@ ,age =%d",person.name ,person.age);

////    }

//    [arr enumerateObjectsUsingBlock:^(CZPerson *person, NSUInteger idx, BOOL *stop) {

//        NSLog(@"%@",person);

////        if(idx == 2){

////            *stop = YES;

////        }

//        if(person.age == 12){

//            *stop = YES;

//        }

//    }];



0 0
原创粉丝点击