OC中的Foundation框架

一、几个常用的结构体

1、NSRange

   两个成员location、length。

//最常用的定义方式,是利用一个函数

NSRange r=NSMakeRange(2,4);


//用途。查找制定字符串在一个字符串中的位置
//假如这个字符串中不包含某个字符串时,length=0,location=NSNotFound(这个值其实就是int型的-1)
NSString * s=@"dhu哈哈";
    
NSRange r=[s rangeOfString:@"哈哈"];
    
NSLog(@"%ld---%ld",r.length,r.location); // 结果是2---3

2、NSPoint\CGPoint

   点,两个成员 x、y,实质上两个参数都是double类型的

//创建方式
CGPoint p1=NSMakePoint(1,2);
CGPoint p2=CGPointMake(2,3); // 比较常用


3、NSSize\CGSize

   尺寸,面积,两个参数 width、height,都是double类型

//创建方式
CGSize p1=NSMakeSize(1,2);
CGSize p2=CGSizeMake(2,3); // 比较常用

4、NSRect\CGRect

     一块区域,有两个参数 origin(就是NSPoint)、size(就是NSSize)

//创建方式
CGRect r=CGRectMake(1,1,2,3);

CGRect r1={{1,2},{56,43}};

5、打印

//打印这几个结构体时,一般先将结构体通过函数转成字符串再打印。NSRange除外
    NSSize size=CGSizeMake(2,3);
    CGPoint p=CGPointMake(1,2);
    CGRect r=CGRectMake(1,1,2,3);
    
    NSString *s1=NSStringFromSize(size);
    NSString *s2=NSStringFromPoint(p);
    NSString *s3=NSStringFromRect(r);
    
    NSLog(@"\n%@\n%@\n%@",s1,s2,s3);
    
 //结果是
 /*
{2, 3}
{1, 2}
{{1, 1}, {2, 3}}
 */

6、常量

CGPointZero,这个常量表示原点,等价于CGPointMake(0,0);

CGSizeZero,表示各个成员都为零

CGRectZero,表示各个成员都是0.

7、判断是否相同的函数

 //判断两个点是否相同
    BOOL b1=CGPointEqualToPoint(CGPointMake(2,1), CGPointMake(2, 1));
    
    //判断两个尺寸是否相同
    BOOL b2=CGSizeEqualToSize(CGSizeMake(2,3), CGSizeMake(3, 2));
    
    //判断两个区域是否相同
    BOOL b3=CGRectEqualToRect(CGRectMake(1,1,1,1), CGRectMake(1,1,1,1));
    
    //判断某个区域是否包含某个点
    BOOL b4=CGRectContainsPoint(CGRectMake(1,1,1,1), CGPointMake(2, 1));


总结:

这些以CG开头的东西都依赖于一个框架 CoreGrahics。这个框架是跨平台的,既支持MAC,又支持ios。Foundation框架中,包含了它们的声明,并不包含定义。因此,用到相关的方法之类的应该添加这个框架。

二、常用的类
1、NSString(不可变字符串)、NSMutableString(可变字符串)

NSString:

/*
     1、字符串的创建方式
    */
   // NSString *s1=[[NSString alloc]initWithString:@"hello"]; // 麻烦,不常用
    
    NSString *s1=[[NSString alloc] initWithFormat:@"age is %d",23];
    
    NSString *s2=@"HELLO";
    
    //c语言字符串转OC字符串
    NSString *s3=[[NSString alloc] initWithUTF8String:"qwe"];
    
    //OC转c
    const char *s4=[s3 UTF8String];
    
    //从文件中读取
    NSString *s5=[[NSString alloc] initWithContentsOfFile:@"/Users/daming/Desktop/01-进制.txt" encoding:NSUTF8StringEncoding error:nil];
    
    /*
     URL :资源路径
     网络协议:http://
     本地文件:file://
     ftp服务器: ftp://
    */
    
    //当路径中有中文时,NSURL不能直接识别,所以用下面的方式解决
    NSString *ss=@"file:///Users/daming/Desktop/代码/0804/作业/01-改错题.m"; //file可以是http,ftp,根据协议不同而变换
    ss=[ss stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *url1=[[NSURL alloc] initWithString:ss];
    NSString *s6 = [[NSString alloc] initWithContentsOfURL:url1 encoding:NSUTF8StringEncoding error:nil];
    
    
    /*
     相应的类方法,如stringWithFormat、URLWithString等
     一般这些对象方法都有相应的类方法,以这类名开头
     */
    
    //获取本地文件协议,这个能识别中文,且不用写协议,因为方法名本来就是file开头
    NSURL *url = [NSURL fileURLWithPath:@"/Users/daming/Desktop/01-进制.txt"];
    NSString *s7 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
   
//字符串写入文件
    [@"eruf\nhduui" writeToFile:@"/Users/daming/Desktop/哈哈.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
    //参数YES 表示中途写入失败时,将不会创建这个文件。NO 表示写入失败依然会创建这个文件。一般都是YES

NSMutableString

它继承自NSString。

//添加字符串
    NSMutableString *s=[NSMutableString stringWithString:@"123"];
    [s appendString:@"456"]; //该方法没有返回值,说明就是在s本身进行操作
    NSLog(@"\ns=%@",s); // s=123456
    
    //删除指定字符串
    NSRange range=[s rangeOfString:@"234"];
    [s deleteCharactersInRange:range];
    NSLog(@"\ns=%@",s); // s=156
    
    
    NSString *s1=@"qwe";
    NSString *s2=[s1 stringByAppendingString:@"123"]; //该方法是返回的另一个新的字符串
    NSLog(@"\n%p---%p\ns2=%@",s1,s2,s2);

2、NSArray 、 NSMutableArray
OC数组,只能放对象,不能存放非OC对象(int、char之类的)。

数组中不能放nil,因为nil是鼠族元素的结束标记。

/*
     1、创建方式
     */
    NSArray *array=[NSArray array]; //一个空数组,将永远是空数组
    
    NSArray *a1=[NSArray arrayWithObject:@"12"]; // 只有一个元素的数组
    
    NSArray *a2=[NSArray arrayWithObjects:@"w",@"34", nil]; //有n个元素,不包括nil
    
    //count方法就是计算数组元素个数的
    NSLog(@"\n%ld\n%ld\n%ld",array.count,a1.count,a2.count);
    
   // 获取某个位置上德元素
    NSLog(@"%@",[a2 objectAtIndex:0]);
    
    //用编译器新特性对数组初始化和访问元素.较快速
    NSArray *a3=@[@"23",@"sd"];
    NSLog(@"%@",a3[1]);
//2、数组遍历
    NSArray *a=@[@2,@"23",@"we",[[Person alloc] init]];
    
    //第一种遍历
    for(int i=0;i<a.count;i++)
    {
        NSLog(@"%@",a[i]);
    }
    
    NSLog(@"------------------------");
    
    //第二种遍历
    for(id obj in a)
    {
        //[a indexOfObject:obj] 表示,obj这个元素的位置
         NSLog(@"%@----%ld",obj,[a indexOfObject:obj]);
    }
    
     NSLog(@"------------------------");
    
    //第三种
    //每遍历到一个元素就调用一次block,并且把当前对象和角标当做参数传给block。stop用于停止遍历
    [a enumerateObjectsUsingBlock:
     ^(id obj, NSUInteger idx, BOOL *stop)
    {
        NSLog(@"%@----%ld",obj,idx);
        
        //当遍历完1这个位置就停止
        if(idx==1)
            *stop=YES;
    }];

NSArray *a1=@[@"23",@"wee",@"3"];
    //NSMutableArray 是NSArray的子类
    
    //常用方法演示
    NSMutableArray *a=[NSMutableArray array]; // 一个可变空数组
    
    //添加元素
    [a addObject:@"wer"];
    
    //添加数组
    [a addObjectsFromArray:a1];
    
    NSLog(@"%ld",a.count);
    
    //移除
    [a removeLastObject];
    
    [a removeObjectIdenticalTo:0];
    NSLog(@"%@",a);
    
    [a removeObject:@"wer"];
    NSLog(@"%ld",a.count);
    
    [a removeAllObjects];
    NSLog(@"%ld",a.count);
3、NSSet 、NSMutableSet

一切与角标相关的方法,set都没有,因为set是无序的!

    NSSet *set=[NSSet set]; // 创建了一个不可变的空set
    
    NSSet *s=[NSSet setWithObject:@"12"]; //只有一个元素的set
    
    NSSet *s1=[NSSet setWithObjects:@"we",@"wed",@"ee",@"ddd", nil]; // 有N个元素的set,不包括nil
    
    // 计算集合元素个数
    NSLog(@"%ld",s1.count);
    
    //set是无序的
    NSString *ss=[s1 anyObject]; //随机返回一个元素
    NSLog(@"%@",ss);

    NSMutableSet *s2=[NSMutableSet set];
    //添加一个元素
    [s2 addObject:@"we"];
    NSArray *a=@[@"qw",@"qa",@"sd"];
    //添加一个数组
    [s2 addObjectsFromArray:a];
    
    NSLog(@"%@",s2);
    
    //删除
    [s2 removeObject:@"we"];
    
    [s2 removeAllObjects];
NSSet和NSArray

相同:都是集合,都只能存放多个OC对象

      不能存放非OC对象(结构体、枚举、int等)

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

区别:一个无序,一个有序

4、NSDictionary和NSMutableDctionary

字典,存的是键值对。key——value。

 //快速创建和快速访问
    NSDictionary *d=@{@"name": @"liming", @"address": @"beijing"};
    id obj=d[@"name" ];
    NSLog(@"%@",obj);
    
    //打印字典
    NSLog(@"%@",d);
    
    int i = d.count; // 键值对的个数
    NSLog(@"%d",i);

一个字典中只能有一个Key,多次给一个Key赋值,会覆盖之前的值。但,允许有多个同样的值。

//创建可变字典
    NSMutableDictionary *d=[NSMutableDictionary dictionary];
    
    //添加键值对
    [d setObject:@"beijing" forKey:@"address"];
    [d setObject:@"xiaoliu" forKey:@"name"];
    NSLog(@"%@",d);
    
    //移除键值对
    [d removeObjectForKey:@"name"];
    NSLog(@"%@",d);


遍历字典

//创建可变字典
    NSMutableDictionary *d=[NSMutableDictionary dictionary];
    
    //添加键值对
    [d setObject:@"beijing" forKey:@"address"];
    [d setObject:@"xiaoliu" forKey:@"name"];
    
    //遍历
    NSArray *keys=[d allKeys];
    for(int i=0;i<d.count;i++)
    {
        NSLog(@"%@----%@",keys[i],d[keys[i]]);
    }
    
    //快速遍历
    //每遍历到一个键值对就调用一次block
    [d enumerateKeysAndObjectsUsingBlock:
    ^(id key, id obj, BOOL *stop)
    {
        NSLog(@"%@======%@",key,obj);
    }];
    
总结:
1.快速创建都是创建的不可变的对象。

2.NSSet没有快速创建



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值