初窥Foundation框架

来源:互联网 发布:大数据 精准医疗 ppt 编辑:程序博客网 时间:2024/05/22 03:41


一、结构体

1、NSRange(location,length)

用NSRange来表示所在位置以及长度

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

打印出来的结果是:loc = 0 , length = 4,表示“love”是从位置0开始,长度为4

NSRange有一个快速创建的方法:NSRange range = NSMakeRange(2,4);

2、NSPoint/CGPoint

用NSPoint或CGPoint来表示点的位置(x,y)

    // 点的位置    CGPoint p = {0,2};    p.x = 10;    p.y = 20;    // 直接调用函数    CGPoint p1 =  CGPointMake(20, 30);    // 将结构体转为字符串    NSString *str3 = NSStringFromPoint(p1);    NSLog(@"%@",str3);

打印出来的结果是:{20,30}

    // 表示原点    CGPoint P2 = CGPointZero;    // 将CGPoint类型转为NSString类型    NSString *str5 = NSStringFromPoint(P2);    NSLog(@"%@",str5);

打印出来的结果是:{0,0}

判断两个点是否重叠

    BOOL pl = CGPointEqualToPoint(p, p1);    NSLog(@"%d",pl);

打印出的结果是:0

3、NSSize/CGSize

用CGSize来表示长宽

    // 长度和宽度    CGSize s = {10,20};    s.width = 20;    s.height = 30;    // 将结构体转为字符串    NSString *str4 = NSStringFromSize(s);    NSLog(@"%@",str4);        CGSize s1= CGSizeMake(20, 30);    // 判断长宽是否相等    BOOL sl = CGSizeEqualToSize(s, s1);    NSLog(@"%d",sl);
打印出的结果分别为{20,30} 和 1
4、NSRect/CGRect

用CGRect来表示点位置和长宽

    // 点位置和长宽    CGRect c = {2,3,4,5};    c.origin = p;    c.size = s;    // 将结构体转为字符串    NSString *str2 = NSStringFromRect(c);    NSLog(@"%@",str2);        CGRect  c1 = CGRectMake(3, 4, 5, 6);    // 判断一个区域是否包含某个点    BOOL cl = CGRectContainsPoint(c1, p);    NSLog(@"%d",cl);
打印出的结果分别为{{10,20},{20,30}} 和 0

二、NSString与NSMutableString

1、NSString

NSString为不可变字符串,即创建了一个字符串对象之后该字符串不可改变

 /**创建字符串*/    NSString *str = @"cx";//  NSString *str = [[NSString alloc] initWithString:@"wj"];    NSString *str1 = [NSString stringWithFormat:@"name = %@",str];        /**C-OC字符串转换*/    // C字符串->OC字符串    NSString *str2 = [[NSString alloc] initWithUTF8String:"cx"];    // OC字符串->C字符串    const char *str3 = [str2 UTF8String];


读取文件/资源

   // URL:资源路径    // 协议头 ://路径    // file:// ->文件资源,本地资源    // ftp://            // 两种获得url的方式    NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/c_xie/Object-C/ios.txt"];    NSURL *url1 = [NSURL fileURLWithPath:@"/Users/c_xie/Object-C/ios.txt"];        // 通过获取文件路径读取字符串    NSString *url_1 = @"//Users/c_xie/Object-C/ios.txt";    NSString *str6 = [NSString stringWithContentsOfFile:url_1 encoding:NSUTF8StringEncoding error:nil];        // 通过URL获取资源    NSString *str5 = [[NSString alloc] initWithContentsOfURL:url1 encoding:NSUTF8StringEncoding error:nil];        NSString *str7 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];        NSLog(@"%@",str7);


字符串导出到新文件

    [@"cx,wj" writeToFile:@"/Users/c_xie/myFile.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];        // \n为换行符    NSString *str8 = @"wj\ncx";    NSURL *url2 = [NSURL fileURLWithPath:@"/Users/c_xie/myFile1.txt"];    [str8 writeToURL:url2 atomically:YES encoding:NSUTF8StringEncoding error:nil];

2、NSMutableString

NSMutableString为可变字符串,即创建了一个字符串之后可以进行修改操作

    NSMutableString *mstr = [NSMutableString stringWithFormat:@"my age is 10"];        [mstr appendString:@" 10,11"];        NSLog(@"mstr=%@",mstr);

删除某个范围内的字符串

    // 用Range来确定范围    NSRange r = NSMakeRange(4, 2);    [mstr deleteCharactersInRange:r];    NSLog(@"mstr=%@",mstr);        NSRange r1 = [mstr rangeOfString:@"is"];    [mstr deleteCharactersInRange:r1];    NSLog(@"mstr=%@",mstr);

NSString类型的字符串可以有添加操作,但会产生新的对象

    NSString *str9 =@"my name is cx";    // 生成一个新的字符串    NSString *str0 = [str9 stringByAppendingString:@" 10 11"];    NSLog(@"mstr=%@",str0);

三、NSArray与NSMutableArray

1、NSArray可变数组

     /*     C语言数组     */        int number[] = {0,1,2,3,4};    Person *p = [[Person alloc] init];    Person *p1 = [[Person alloc] init];        Person *person[] ={p,p1};            /*     不可变数组:NSArray     */    // 1、创建数组    NSArray *array = [NSArray arrayWithObject:@"jack"];    // nil是数组元素的结束符    NSArray *array1 = [NSArray arrayWithObjects:@"jack",@"tom", nil];    // 快速创建一个array对象    NSArray *array2 = @[@"marry",@"mike",@"tmd"];            // NSArray的元素个数    [array2 count];    NSLog(@"%ld",array2.count);        // NSArray元素的访问    NSLog(@"%@",[array1 objectAtIndex:1]);    NSLog(@"%@",array2[0]);

2、遍历数组

for循环遍历

   for (int i = 0; i<array2.count; i++) {        NSLog(@"%@",array2[i]);    }

快速遍历

    for(id obj in array2)    {        //count++;        NSUInteger count1 = [array2 indexOfObject:obj];        NSLog(@"---%ld----%@",count1,obj);          }

用enumerateObjectsUsingBlock方法遍历

        [array2 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {        NSLog(@"====%ld====%@",idx,obj);        if(idx == 1)        {            // 停止循环            *stop = YES;        }    }];</span>
enumerateObjectsUsingBlock遍历原理

    // 每遍历到一个元素就会调用一次block,并且当前元素和索引位置传给block        // ^(id obj, NSUInteger idx, BOOL *stop)会被转为    void (^myBlock)(id,NSUInteger,BOOL*) = ^(id obj, NSUInteger idx, BOOL *stop)    {                NSLog(@"====%ld====%@",idx,obj);        if(idx == 1)        {            // 停止循环            *stop = YES;        }    };        // enumerateObjectsUsingBlock中依然有个for循环    for (int j = 0; j<array2.count; j++) {        // 用来标记是否需要停止遍历        BOOL isStop = NO;        id obj = array[j];        myBlock(obj,j,&isStop); // BOOL* 是个指针参数,必须传入地址才能修改isStop这个变量的值        if (isStop) {            break;        }    }

3、NSMutableArray不可变数组

       NSMutableArray *array3 = [NSMutableArray arrayWithObjects:@"me",@"you",nil];    // 添加元素    [array3 addObject:@"he"];    [array3 addObject:[[Person alloc] init]];    [array3 addObjectsFromArray:array1];        // 删除元素     [array3 removeAllObjects];     // 删除指定元素     [array3 removeObject:@"he"];     [array3 removeObjectAtIndex:0];

四、NSSet与NSMutableSet

1、NSSet:可变的

    NSSet *s = [NSSet set];        NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];        // 随机拿出一个元素    NSString *str =  [s2 anyObject];        NSLog(@"%@", str);    // 获取set中元素的个数    NSLog(@"%ld", s2.count);

2、NSMutableSet:不可变的

    NSMutableSet *s = [NSMutableSet set];        // 添加元素    [s addObject:@"jack"];        // 删除元素     [s removeObject:@"jack"];

3、NSSet和NSArray的对比

共同点:都是集合,都能存放多个OC对象且只能是存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举),NSSet和NSArray本身都不可变,都有一个可变的子类

不同点:NSArray有顺序,NSSet没有顺序

五、NSDictionary与NSMutableDictionary

1、NSDictionary

NSDictionary被成为OC字典,且不可变

创建NSDictionary

    NSDictionary *dir = [NSDictionary dictionaryWithObject:@"cx" forKey:@"name"];    id obj = [dir objectForKey:@"name"];    NSLog(@"%@",obj);        NSArray *values = @[@"cx",@"bt",@"333"];    NSArray *keys = @[@"name",@"address",@"phone"];    NSDictionary *dic = [NSDictionary dictionaryWithObjects:values forKeys:keys];    NSLog(@"%@",dic);    NSLog(@"%@",dic[@"address"]);

快速创建字典

    NSDictionary *dict = @{@"name" : @"cx",@"address" : @"bt"};        NSLog(@"%@",dict[@"address"]);</span>

遍历字典

    NSArray *array = [dict allKeys];    for (int i = 0; i<dict.count; i++) {        NSLog(@"%@ = %@",array[i],dict[array[i]]);    }            [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {        NSLog(@"%@ = %@",key,obj);    }];

2、NSMutableDictionary

NSMutableDictionary为可变字典

    NSMutableDictionary *dic1 = [NSMutableDictionary dictionary];    [dic1 setObject:@"sex" forKey:@"man"];    NSLog(@"%@",dic1);    [dic1 removeObjectForKey:@"man"];    NSLog(@"-%@",dic1);

快速创建一个可变字典

    NSArray *person = @[@{@"name":@"wj",@"address":@"sh",@"book":@[@"ios",@"j2ee"]},@{@"name":@"cx",@"address":@"sh"}];        NSString *Name = person[0][@"name"];        NSLog(@"%@",person[0][@"book"][0]);    NSLog(@"%@",Name);

六、NSNumber

NSNumber可用来创建一个基本类型的对象

    NSNumber *num = [NSNumber numberWithInt:10];        NSDictionary *dict =  @{    @"name" : @"jack",    @"age" : num        };        NSNumber *num2 = dict[@"age"];            int a = [num2 intValue];        NSLog(@"%d" , a);
快速创建一个NSNumber对象

    // @20  将 20包装成一个NSNumber对像     NSArray *array = @[       @{@"name" : @"jack", @"age" : @20},       @{@"name" : @"rose", @"age" : @25},       @{@"name" : @"jim", @"age" : @27}    ];           // 将各种基本数据类型包装成NSNumber对象    /*@10.5;    @YES;    @'A'; // NSNumber对象        @"A"; // NSString对象        */        // 将age变量包装成NSNumber对象    int age = 100;    @(age);    //[NSNumber numberWithInt:age];            NSNumber *n = [NSNumber numberWithDouble:10.5];            int d = [n doubleValue];                int a = 20;        // @"20"    NSString *str = [NSString stringWithFormat:@"%d", a];    NSLog(@"%d", [str intValue]);    

七、NSDate

使用NSDate可快速创建一个时间对象

    // 创建一个date对象    NSDate *date = [NSDate date];    // 打印出的是格林时间 0时区,北京在东8区,相差8个小时    NSLog(@"%@",date);        // 在date的基础上加上5秒    NSLog(@"%@",[NSDate dateWithTimeInterval:5 sinceDate:date]);        // 计算自1970年起到date走过的秒数    NSTimeInterval seconds = [date timeIntervalSince1970];    NSLog(@"%f",seconds);
自定义日期格式

    /**日期转为字符串*/    NSDate *date = [NSDate date];        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];    // 日期格式化    /*     y:年     M:月     d:日     h:时(24小时制)     H:时(12小时制)     m:分     s:秒     */    formatter.dateFormat = @"yyyy-MM-dd hh:mm:ss";    // 将日期转为字符串    NSString *str = [formatter stringFromDate:date];        NSLog(@"%@",str);        /**字符串转为日期*/    NSString *time = @"2011/09/10 18:56";    NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];    formatter1.dateFormat = @"yyyy/MM/dd HH:mm";        NSDate *date1 = [formatter1 dateFromString:time];    NSLog(@"%@",date1);

八、NSValue

使用NSValue可以实现将结构体转为对象,以实现将结构体放入数组

    // 结构体 -> OC对象    CGPoint p = CGPointMake(10, 10);        // 将结构体转为Value对象    NSValue *value = [NSValue valueWithPoint:p];        // 将value转为对应的结构体    CGPoint p1 = [value pointValue];        // 实现将结构体放入数组    NSArray *array = @[value];        NSLog(@"%@",array);    return 0;

九、编写一个小程序计算文件中代码的行数

#import <Foundation/Foundation.h>NSUInteger codeLineCount(NSString *path);int main(){    NSString *path = @"/Users/c_xie/OC程序";    NSUInteger count =  codeLineCount(path);    NSLog(@"%ld",count);        return 0;}NSUInteger codeLineCount(NSString *path){    // 1、获得文件管理者    NSFileManager *mdr = [NSFileManager defaultManager];        // 2、判断文件是否存在以及是否是文件夹    BOOL isdir = NO;    BOOL exit = [mdr fileExistsAtPath:path isDirectory:&isdir];     // 修改变量需传入isdr的地址!!    // 不存在,返回    if(!exit) return 0;        // 传入的文件是个目录directory(文件夹)    if (isdir) {        // 3、获取目录下的所有文件名        NSArray *file = [mdr contentsOfDirectoryAtPath:path error:nil];                        __block int count = 0;                 // 代码行数        // Variable is not assignable (missing __block type specifier) 可变因素不可分配(缺少__block类型区分符)        __block NSString *fullPath;                [file enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {            fullPath = [NSString stringWithFormat:@"%@/%@",path,obj];   // 不要漏写“/”            // 4、回调函数            count += codeLineCount(fullPath);            //NSLog(@"%@",fullPath);        }];                return count;            }    else    {        // 获得文件的后缀名并转为小写字母        NSString *extension = [[path pathExtension] lowercaseString];        // 过滤非.h,.m ,.c文件        if (!([extension isEqualToString:@"h"]||[extension isEqualToString:@"m"]||[extension isEqualToString:@"c"])) {            return 0;        }                NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];        NSArray *array = [str componentsSeparatedByString:@"\n"];                // 去掉路径中的/Users/c_xie/OC程序        NSRange range = [path rangeOfString:@"/Users/c_xie/OC程序/"];        NSString *str1 = [path stringByReplacingCharactersInRange:range withString:@""];                NSLog(@"%@ - %ld",str1,array.count);                return array.count;    }}

该程序的执行结果如下:






0 0
原创粉丝点击