一、几个常用的结构体
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
点,两个成员 x、y,实质上两个参数都是double类型的
//创建方式
CGPoint p1=NSMakePoint(1,2);
CGPoint p2=CGPointMake(2,3); // 比较常用
尺寸,面积,两个参数 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}};
//打印这几个结构体时,一般先将结构体通过函数转成字符串再打印。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}}
*/
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
它继承自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);
数组中不能放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
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);
//创建可变字典
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
总结:
2.NSSet没有快速创建