黑马程序员-12.OC的Foundation框架

                        ------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1.NSRange

1)NSRange(结构体)

1>NSRange的几种用法

NSRange r1 = {2, 4}; // 不用
NSRange r2 = {.location = 2, .length = 4};// 不用
NSRange r3 = NSMakeRange(2, 4); // 掌握

2>查找某个字符串在str中的范围

如果找不到,length=0,location=NSNotFound==-1

 NSString *str = @"i love oc";
    
    NSRange range = [str rangeOfString:@"java"];
    NSLog(@"loc = %ld, length=%ld", range.location, range.length);

2) CGPoint

1>CGpoint :表示一个点的位置坐标信息

2>定义结构

  CGPoint p1 = NSMakePoint(10, 10);

  NSPoint p2 = CGPointMake(20, 20);

3)CGRect

1>表示一个局域

CGRect r1 =CGRectMake(0,0, 100, 50);

2>表示原点

 CGPointZero == CGPointMake(0, 0)

4)将结构体转为字符串

CGPoint p1 = NSMakePoint(10, 10);

NSString *str = NSStringFromPoint(p1);

 
CGSize s3 = NSMakeSize(200, 60);

NSString *str = NSStringFromSize(s3);

CGRect r1 = CGRectMake(0, 0, 100, 50);

NSString *str = NSStringFromRect(r1);


注意:使用CGPointZero等的前提是添加CoreGraphics框架


5)比较两个点是否相同

 BOOL b = CGPointEqualToPoint(CGPointMake(10, 10), CGPointMake(10, 10));
    //CGRectEqualToRect(<#CGRect rect1#>, <#CGRect rect2#>)
    //CGSizeEqualToSize(<#CGSize size1#>, <#CGSize size2#>)
    
    
    // x (50, 150) y (40 , 90)
    BOOL b2 = CGRectContainsPoint(CGRectMake(50, 40, 100, 50), CGPointMake(60, 45));
    
    NSLog(@"%d", b2);

2.NSString

1)NSString :不可变字符串(初始化以后不能够改变字符串的长度)
2)字符串的创建
    NSString *s1 = @"jack";
    NSString *s2 = [[NSString alloc] initWithString:@"jack"];
    NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d", 10];

3)OC字符串和C字符串的相互转换

  // C字符串 --> OC字符串
    NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"];
    // OC字符串 --> C字符串
    const char *cs = [s4 UTF8String];
    
    // NSUTF8StringEncoding 用到中文就可以用这种编码
    NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil];

4)writeToFile

字符串的导出

[@"Jack\nJack" writeToFile:@"/Users/apple/Desktop/my.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
    
    
    NSString *str = @"4234234";
    NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/my2.txt"];
    [str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];

3.NSMutableString

1)NSMutableString : 可变字符串

2)拼接内容到s1的后面 

   NSMutableString *s1 = [NSMutableString stringWithFormat:@"my age is 10"];

   [s1 appendString:@" 11 12"];


4.NSArray :不可变数组

1).NSArray的创建

    NSArray *array2 = [NSArray arrayWithObject:@"jack"];
    
    // nil是数组元素结束的标记
    NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
    // [array2 count];
    
    //NSArray *array4 = [NSArray arrayWithObjects:@"jack", @"rose", @"4324324", nil];
    
    // 快速创建一个NSArray对象
    NSArray *array4 = @[@"jack", @"rose", @"4324324"];

2).NSArray的元素个数


 NSLog(@"%ld", array.count);


3).NSArray中元素的访问

    NSLog(@"%@", [array3 objectAtIndex:1]);

    array3[1];

注意:

OC数组不能存放nil值

OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等

 这个array永远是空数组

 NSArray *array = [NSArray array];

4)数组的遍历的三种方法

Person *p = [[Person alloc] init];
    
 NSArray *array = @[p, @"rose", @"jack"];
********************第一种方法******************    
       for (int i = 0; i
     
     

5.NSMutableArray : 可变数组

1)可变数组的基本用法
1>初始化
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];

2>添加元素

  [array addObject:[[Person alloc] init]];

   [array addObject:@"jack"];

3>删除元素

[array removeAllObjects];

4> 删除指定的对象

[array removeObject:@"jack"];

 [array removeObjectAtIndex:0];

5>@[] 只创建不可变数组NSArray

错误写法

    NSMutableArray *array = @[@"jack", @"rose"];

    [array addObject:@"jim"];


6.计算代码行数

#import 
       
       
        
        


// 计算文件的代码行数
/*
 path : 文件的全路径(可能是文件夹、也可能是文件)
 返回值 int :代码行数
 */
NSUInteger codeLineCount(NSString *path)
{
    // 1.获得文件管理者
    NSFileManager *mgr = [NSFileManager defaultManager];
    
    // 2.标记是否为文件夹
    BOOL dir = NO; // 标记是否为文件夹
    // 标记这个路径是否存在
    BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir];
    
    // 3.如果不存在,直接返回0
    if(!exist)
    {
        NSLog(@"文件路径不存在!!!!!!");
        return 0;
    }
    
    // 代码能来到着,说明路径存在
    
    
    if (dir)
    { // 文件夹
        // 获得当前文件夹path下面的所有内容(文件夹、文件)
        NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil];
        
        // 定义一个变量保存path中所有文件的总行数
        int count = 0;
        
        // 遍历数组中的所有子文件(夹)名
        for (NSString *filename in array)
        {
            // 获得子文件(夹)的全路径
            NSString *fullPath = [NSString stringWithFormat:@"%@/%@", path, filename];
            
            // 累加每个子路径的总行数
            count += codeLineCount(fullPath);
        }
        
        return count;
    }
    else
    { // 文件
        // 判断文件的拓展名(忽略大小写)
        NSString *extension = [[path pathExtension] lowercaseString];
        if (![extension isEqualToString:@"h"]
            && ![extension isEqualToString:@"m"]
            && ![extension isEqualToString:@"c"])
        {
            // 文件拓展名不是h,而且也不是m,而且也不是c
            return 0;
        }
        
        // 加载文件内容
        NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
        
        // 将文件内容切割为每一行
        NSArray *array = [content componentsSeparatedByString:@"\n"];
        
        // 删掉文件路径前面的/Users/apple/Desktop/iOS课堂共享/0722课堂共享/
        NSRange range = [path rangeOfString:@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享/"];
        NSString *str = [path stringByReplacingCharactersInRange:range withString:@""];
        
        // 打印文件路径和行数
        NSLog(@"%@ - %ld", str, array.count);
        
        return array.count;
    }
}

int main()
{
    
    NSUInteger count = codeLineCount(@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享");
    
    NSLog(@"%ld", count);
    return 0;
}

void test()
{
    NSString *str = @"jack\nrose\njim\njake";
    
    [str writeToFile:@"/Users/apple/Desktop/abc.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
    
    
    NSArray *array = [str componentsSeparatedByString:@"\n"];
    
    for (NSString *line in array)
    {
        NSLog(@"%@", line);
    }
    
    
    //int count = codeLineCount(@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享/0811/代码/04-block/04-block/main.m");
    
    //NSLog(@"count=%d", count);
}

       
       

7.NSSet:不可变的集合

1)set的基本使用

1>定义和初始化

NSSet *s = [NSSet set];

    

NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];

2>随机拿出来一个元素

NSString *str =  [s2 anyObject];

NSLog(@"%@", str);

3>NSMutableSet:可变的集合


 NSMutableSet *s = [NSMutableSet set];

    添加元素

    [s addObject:@"hack"];

    删除元素

    [s removeObject:<#(id)#>];

4>NSSet和NSArray的对比

 1> 共同点

 * 都是集合,都能存放多个OC对象

 * 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)

 * 本身都不可变,都有一个可变的子类

 2> 不同点

 * NSArray有顺序,NSSet没有顺序

8.NSDictionary

1)字典(里面存放的东西都是键值对

key ----> value

索引 ----> 文字内容

2)初始化
1>第一种初始化方法

 NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];

2>第二种初始化的方法

   NSArray *keys = @[@"name", @"address"];

   NSArray *objects = @[@"jack", @"北京"];

  NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

    

3>第三中初始化的方法

   NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:

     @"jack", @"name",

     @"北京", @"address",

     @"32423434", @"qq", nil];*/

4>第四种初始化的方法

NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};

     id obj = [dict objectForKey:@"name"];

     id obj = dict[@"name"];

    NSLog(@"%@", obj);


注意:NSLog(@"%ld", dict.count);

返回的是键值对的个数

3)字典的使用
添加键值对

    [dict setObject:@"jack" forKey:@"name"];

移除键值对

     [dict removeObjectForKey:<#(id)#>];

     NSString *str = dict[@"name"];

4)字典的遍历

{
   
    NSDictionary *dict = @{
    @"address" : @"北京",
    @"name" : @"jack",
    @"name2" : @"jack",
    @"name3" : @"jack",
    @"qq" : @"7657567765"};
    
    //    NSArray *keys = [dict allKeys];
    //
    //    for (int i = 0; i
      
      
注意:

  字典不允许有相同的key,但允许有相同的value(Object)

  字典无序的

5)多个类型的键值对进行初始化和取值


NSArray *persons = @[
    @{@"name" : @"jack", @"qq" : @"432423423", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},
    @{@"name" : @"rose", @"qq" : @"767567"},
    @{@"name" : @"jim", @"qq" : @"423423"},
    @{@"name" : @"jake", @"qq" : @"123123213"}
    ];
    
    // 
    // NSDictionary *jim = persons[2];
    
    
    // 
    NSString *bookName = persons[0][@"books"][1];
    NSLog(@"%@", bookName);
    //NSArray *array = persons[0][@"books"];
    
    //NSLog(@"%@", array);
    
    // 先取出1位置对应的字典
    // 再取出字典中qq这个key对应的数据
    //NSLog(@"%@", persons[1][@"qq"]);
    
    // NSLog(@"%@", jim);


OC中集合的总结

1>.NSArray\NSMutableArray

 * 有序

 * 快速创建(不可变):@[obj1, obj2, obj3]

 * 快速访问元素:数组名[i]

 

 2>NSSet\NSMutableSet

 * 无序

 

 3>NSDictionary\NSMutableDictionary

 * 无序

 * 快速创建(不可变):@{key1 : value1,  key2 : value2}

 * 快速访问元素:字典名[key]


9.NSNumber

由于集合里面只可以存放OC对象,所以有的时间需要把基本类型转换成OC对象 这个时间就是用NSNumber

1)将各种基本数据类型包装成NSNumber对象

1>整形包装成NSNumber

    @10.5;

2>布尔包装成NSNumber

    @YES;

3>注意区分 @'A';和 @"A";

    @'A'; // NSNumber对象

    

    @"A"; // NSString对象

    

4> 将age变量包装成NSNumber对象

    int age = 100;

    @(age);

    //[NSNumber numberWithInt:age];

    

5>把整形包装成NSNumber对象


   int a = 20;

    // @"20"

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

NSNumber对象装换成整形

 NSLog(@"%d", [str intValue]


10.NSDate

 1)创建一个时间对象

    NSDate *date = [NSDate date];


2打印出的时候是0时区的时间(北京-东8区)

    NSLog(@"%@", date);


3)日期格式化类

  NSDate *date = [NSDate date];
    
      // 日期格式化类
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    
  formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    
    NSString *str = [formatter stringFromDate:date];
    
    NSLog(@"%@", str);

4 将字符串按一定的格式输出
   // 09/10/2011
    NSString *time = @"2011/09/10 18:56";
    
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyy/MM/dd HH:mm";
    
    NSDate *date = [formatter dateFromString:time];
    NSLog(@"%@", date);


11.NSValue

1)是NSNumber的父类 ,NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue

2)结构体--->OC对象

CGPoint p = CGPointMake(10, 10);

3)将结构体转为Value对象

   NSValue *value = [NSValue valueWithPoint:p];

 4)将value转为对应的结构体

    [value pointValue];

    NSArray *array = @[value ];

    


           ------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值