------- android培训、iOS培训、Java培训、.NET培训期待与您交流! ----------
PS:这节是重点哟!
说明:
1、结构体
2、集合
1、结构体
1> NSRange:(范围)
① location定位下标;length定位的长度
② 使用:(NSString * str = @”i love you”;中love的范围)
NSRange r1 = {2,4};//不用
NSRange r2 ={.location = 2,.length = 4};//不用
NSRange r1 = NSMakeRange(2,4); //掌握
//查找某个字符串在str中的范围,若未找到,length=0,location=NSNotFound=-1;
NSRange range = [str rangeOfString:@”love”];
1> NSPoint/CGPoint(点)
① CGPoint p1 = NSMakePoint(5,3);
② NSPoint p1 = CGPointMake (5,3);//最常用,跨平台
③ 原点:CGPointZero == CGPointMake(0,0);
④ 注意:将结构体转为字符串输出内容:NSString *str=NSStringFromPoint(p1);
2> NSSize/CGSize(UI元素的尺寸)
① NSSize n1 = CGSizeMake(100,50);或=NSMakeSize(100,50);
② CGSize n2 = NSMakeSize(100,50);
③ 注意:将结构体转为字符串输出内容:NSString *str=NSStringFromSize(n1);
3> NSRect/CGRect(点和尺寸)
① NSRect n1 = CGRectMake(5,3,100,50);//x,y,width,height
② CGRect n2 = NSMakeRect(5,3,100,50);
。注意:可CGRect n2 = {{5,3},{100,50}};
或:CGRect n2 ={p1,s2};
原点:CGRect n2 ={CGPointMake(0,0), CGSizeMake(100,50)};
③ 注意:将结构体转为字符串输出内容:NSString *str=NSStringFromRect (n1);
4> CGPointEqualToPoint(比较两个点的x和y值是否一致):
① BOOL b = CGPointEqualToPoint(CGPointMake (5,3), CGPointMake (5,3));
② CGPointEqualToRect(CGrect rect1,CGRect rect2);
③ CGPointEqualToSize(CGSize size1,CGSize size2);
④ CGRectContainPoint(CGRectMake(5,3,100,50),CGPointMake(100,50));
5>
2、NSString使用:
1> NSString:不可变字符串;
NSMutableString(NSString的子类):可变字符串;
2> 字符串的创建:
① NSString *s1 = @”jack”;
② NSString *s2 = [[ NSString alloc] initWithString:@”jack”];
③ NSString *s3 = [[NSString alloc] initWithFormat:@”jack”];
//(C字符串-OC字符串)
④ NSString *s4 = [[ NSString alloc] initWithUTF8String:”jack”];
//(OC字符串—C字符串)
⑤ const char * cs = [s4 UTF8String];//const可省略
//文件内容:(文件路径:initWithContentsOfFile;用到中文就可用此编码:NSStringEncoding)
⑥ NSString *s5 = [[NSString alloc] initWithContentsOfFile:(NSString *) encoding:(NSStringEncoding) error:(NSError *_autoreleasing *)];
例如:NSString *s5 = [[NSString alloc] initWithContentsOfFile:@”/Users/Diana/apple/Desktop/1.txt” encoding:NSStringEncoding)error:nil];
//读取文件:(URL:读取资源路径;协议头://路径;file://;ftp://)
⑦ NSString *s6 = [[NSString alloc] initWithContentsOfURL:(NSURL *) encoding:(NSStringEncoding) error:(NSError *_autoreleasing *);
//定义URL:NSURL*url=[[NSURL alloc]initWithString:@”http://www.baidu.com”];或者:NSURL *url =[NSURL fileURLWithPath:@” /Users/Diana/apple/Desktop/1.txt”];
例如:NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSStringEncoding error:nil];
⑧ 一般都有一个类方法与对象方法配对;
。NSURLè[NSURL URLWithString:(NSString *)];
。NSStringè[NSString stringWithFormat:@””];
⑨
3> 将字符串导出到文件中:(原子性操作,较安全【一旦中途失败,就终止操作】:atomically:YES)
① [@”jack\njack” writeToFile:@” /Users/Diana/apple/Desktop/1.txt” atomically:YES encoding:NSUTF8StringEncoding error:nil];
4>
3、NSMutableString(NSString子类)的使用:
1> 可变
① 拥有父类的方法:
② NSMutableString *s1=[ NSMutableString stringWithFormat:@”age is 10”];
//拼接内容到s1后面
[s1 appendString:@” 11,12”];
//删除某个范围的字符
NSRange range = [s1 rangeOfString:@”is”];//找出is字符的范围
[s1 deleteCharactersInRange:range];//删除
③
2>
4、集合类:NSArray/NSSet/NSDictionary NSMUtableSet
1> NSArray
① (父类)NSArray:不可变数组(数组创建时有几个元素就只有几个元素);
(子类)NSMutableArray:可变数组;
② NSArray *array = [NSArray array];//空数组(创建时未指定个数,所以为空数组)
。NSArray *array2 = [NSArray arrayWithObject:@”jack”];//一个对象
。NSArray *array3 = [NSArray arrayWithObjects:@”jack”,@”rose”,nil];//多个对象,nil是数组元素结束的标记;
。NSArray *array3 = @[@”jack”,@”rose”];//快速创建一个NSArray对象
。[array count];//使用get方法count输出数据的个数
。[array objectAtIndex:1];//(效率低)元素的访问
。array[0];//根据下标查找数组内容(效率高)
③ OC数组只能存放OC对象,不能存放非OC对象(如:int struct enum等);
④ OC数组不能存放nil值;
⑤ 遍历:
。普通遍历:
for(int i = 0; i < array.count;i++)
{
NSLog(@”数组是:%@”,array[i]);
}
。快速遍历:(id obj代表数组中的每一个元素)
for(id obj in array)
{
NSUInteger i =[array indexOfObject:obj];//找出obj元素在数组中的位置
NSLog(@”数组是:%d”,obj);
}
。快速遍历2:(推荐)
[array enumerateObjectsUsingBlock:
//每遍历一个元素,就会调用block,并将当前元素和索引位置当做参数传给block;
^(id obj,NSUInteger idx,BOOL *stop)
{
NSLog(@”下标是:%ld,数组是:%d”,idx,obj);
//停止遍历
*stop = YES;
}];
⑤
2>
5、计算单个文件的代码行数(考察NSString、NSArray、NSFileManager的使用):
1> 文件管理者:NSFileManager;
6、NSMutableArray可变数组的基本使用
1> 实例化:NSMutableArray * array = [NSMutableArray array];
2> 实例化并添加元素:NSMutableArray * array = [NSMutableArray arrayWithObjects:@”rose”,@”jim”,nil];
3> 添加数组元素:[array addObject:@”jack”];//可直接添加对象;
4> 删除元素:[array removeAllObjects];
5> 删除指定对象:[array removeObject:@”jack”];
6> 根据下标删除元素:[array removeObjectAtIndex:2];
7> 删除最后一个元素:[array removeLastObject];
8> 删除所有元素:[array removeAllObject];
9> 。。。。。。
7、NSSet基本使用(存放数据无顺序):
1> 实例化:NSSet *s = [NSSet set];//空数组
2> 实例化并添加元素NSSet * s2 = [NSSet setWithObjects:@”jack”,@”rose”,nil];
3> 输出元素个数:s2.count;
4> 随机返回一个元素:[s2 anyObject];
8、NSMutableSet基本使用:
1> 实例化:NSMutableSet *s =[NSMutableSet set];
2> 添加元素:[s addObject:@”jack”];
3> 删除元素:[s removeObject:@”jack”];
4> 删除所有元素:[s removeAllObject];
9、NSSet和NSArray的对比:
1> 共同点:
① 都是集合,都能存放多个OC对象;
② 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、float、char等,结构体、枚举);
③ 本身都不可变,且都有一个可变的子类;
2> 不同点:
① NSArray是有序的,NSSet是无序的;
3>
10、字典NSDictionary的基本使用(不可变,无序):
1> 字典不允许有相同的key,但允许有相同的value(object);
2> NSDictionary里面存储的东西都是键值对;
3> 实例化(存放一个键值对):NSDictionary *dict = [NSDictionary dictionaryWithObject:@”jack” forKey:@”name”];
4> 使用数组存放多个键值对:NSArray *keys = @[@”name”,@”address”];
NSArray *objects = @[@”jack”,@”北京”];
NSDictionary *dict = [NSDictionary dictionaryWithObject:objects forKey:@keys];
5> 实例化(不建议使用):NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@”jack”,@”name”,@”北京”,@”address”,nil];
6> XCode简化上面5的实例化:NSDictionary *dict = @{@”name”:@”jack”,@”address”:@”北京”};
7> 访问字典中的内容:id obj = [dict objectForKey:@”name”];
8> XCode简化访问字典中的内容:id obj = dict[@”name”];
9> 返回键值对个数:dict.count;
10>
11、NSMutableDictionary的使用:
1> 实例化:NSMutableDictionary *dict = [NSMutableDictionary dictionary];
2> 添加键值对:[dict setObject:@”jack” forKey:@”name”];
3> 移除键值对:[dict removeObjectForKey:@”name”];
4>
12、字典的遍历:
1> //key数组:NSArray *keys = [dict allKeys];
For(int i = 0; i < dict.count; i++)
{
NSString *key = keys[i];//取出key
NSString *object = dict[key]; //取出key对应的值
}
2> XCode简化上面遍历方法:
[dict enumerateKeysAndObjectsUsingBlock:
^(id key,id obj,BOOL *stop)
{
NSLog(@”%@-%@”,key,obj);
*stop = YES;
}];
13、集合总结:
1> NSArray/NSMutableArray:
① 有序;
② 快速创建(不可变):@[];
③ 快速访问元素:数组名[i];
2> NSSet/NSMutableSet:
① 无序;
3> NSDictionary/NSMutableDictionary:
① 无序;
② 快速创建:@{key1:value1,key2:value2};
③ 快速访问:字典名[key];
4> 字典定义多个key值时的另一种方式:
① NSArray *persons = @[
@{@”name”:@”jack”,@”qq”:@”23456788”},
@{@”name”:@”rose”,@”qq”:@”23456788”},
@{@”name”:@”jim”,@”qq”:@”23456788”},
] ;
② 取值:NSDictionary *jim = persons[2];
③ 取值2:NSLog(@”%@”,persons[1][@”qq”]);//表先取出1位置对应的字典再取出字典中qq这个key对应的值;
14、NSNumber的使用(只能包装数字):
1> NSNumber能包装基本数据类型为对象,是因为继承了NSValue;
2> OC集合不能存放基本数据类型,就使用NSNumber包装;
3> 包装int数据:NSNumber *num = [NSNumber numberWithInt:10];
使用字典调用:NSDictionary *dict = @{@”name”:@”jack”,@”age”:num};
4> 获取封装后的基本数据:NSNumber *num2 = dict[@”age”];
5> 对象转换成基本数据类型:int a = [num2 intValue];
6> XCode中简化上面2使用NSNumber将各种基本数据类型包装成NSNumber对象:包装基本数据:@基本数据(如:@20,@YES,@10.2,@’A’);
7> 注意:@’A’为NSNumber类型,@”A”为NSString类型;
8> 将age变量包装成NSNumber对象:int age = 100;@(age);
9>
15、NSValue的使用(可包装任何东西:枚举、结构体等):
1> 使用NSValue将结构体包装成OC对象:(例如结构体:CGPoint p = CGPointMake(10,10);)NSValue *value = [NSValue valueWithPoint:p];
2> 将value转为对应的结构体:[value pointValue];
3>
16、NSDate使用:
1> 创建时间对象(date为运行这句话时的0时区时间):NSDate *date = [NSDate date];
2> 创建比date晚5秒的时间对象:NSDate *date 2= [NSDate 达特WithTimeInterval:5 sinceDate: date];
3> 返回1970年开始走过的秒数:NSTimeInterval seconds = [date2 timeIntervalSince1970];
4> 日期格式化类:NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
设置格式(y年M月d日m分s秒H24时h12小时):formatter.dateFormat = @”yyyy-MM-dd HH:mm:ss”;
打印输出格式后的:NSString * str = [formatter stringFromDate:date];
------- android培训、iOS培训、Java培训、.NET培训期待与您交流! ----------