IOS学习---OC基础学习(Foundation)
2014-10-25 23:16
218 查看
Foundation框架: 包含许多常见的数据类型 是其他所有Ios框架的基础 结构体: NSRange: 范围:成员变量有location(位置)、length(长度) @“i love oc”中love的位置和范围 NSRange ra = {2,4} NSRange rb = {.location = 2,length = 4}; 常用的是: NSRange rc = NSMakeRange(2,4); NSString *str = @"i love oc" 查找某个字符串在str中的范围: NSRange range = [str rangOfString:@"love"] 若要查找的字符串不存在,那么length=0;location=NSNotFound=-1 NSUInteger = unsigned long 输出时以%ld的形式输出 NSLog(@"loc = %ld,length = %ld",rang.location,rang.length); NSPoint\CGPoint: 也是一个结构体,包含了两个double类型的数值为成员(用来表示点的坐标) 开发中一般使用CGPoint 适合跨平台使用 CGPoint p1 = NSMakePoint(10,20); CGPoint p2 = CGPointMake(10,10) (CGPoint与NSPoint可以互换 但是后面的方法时二者专有) NSSize\CGSize: 通常用来表示尺寸 高度和宽度 CGSize s1 = CGSizeMake(10,5); CGSize s2 = NSMakeSize(10,5); (CGSize与NSSize可以互换 但是后面的方法时二者专有) NSRect\CGRect 成员变量有两个 CGPoint 类型的坐标(origin) CGSize类型的 尺寸(size) CGRect c1 = CGRectMake(宽度,高度,x坐标,y坐标) CGRect c2 = NSMakeRect(宽度,高度,x坐标,y坐标) 输出成员的方法: NSLog(@"x=%f,y=%f,width=%f,height = %f",r1.origin.x,r1.origin.y,r1.size.width,r1.size.height); 过于麻烦 解决办法:将结果提转为字符串输出 NSString *str = NSStringFromPoint(p1); NSLog(@"%@",str) 输出结果:{10,20} 同样,对于CGSize,CGRect可以使用 NSString * str1 = NSStringFromSize(s1); 输出结果{10,5} NSString * str2 = NSStringFromRect(c1); 输出结果:{{10,20},{10,5}} 对于CGRect也可以通过下面的方法定义: CGRect c3 = {{1,2},{3,4}}; CGRect c4 = {p1,s1}; 设置原点 CGPointZero == CGPointMake(0,0); 例如: CGRect c1 = {CGPointZero,CGSizeMake(10,9)}; 同样: CGSizeZero == CGSizeMake(0,0);长和宽都为0 CGRectZero == CGRectMake(0,0,0,0) 其他函数: CGPointEqualToPoint(CGPoint p1,CGpoint p2) 返回布尔类型变量 比较两个点的位置是否相同 CGSizeEqualToSize(CGSize s1,CGSize s2)比较尺寸是否相同 CGRectEqualToRect(CGRect r1,CGRect r2)比较位置和尺寸是否相同 CGRectContainsPoint(CGRect r1,CGPoint p1) 判断CGRect对象 r1 的坐标是否是p1 CGRectContainsRect(CGRect r2,CGRect r3) 判断CGRect对象 r2 的尺寸是否为s2 使用上面这些函数的前提是添加CoreGraphics框架 (小知识: 话说乔布斯 被苹果赶出去的那段时间 创建了一个公司叫做 NextStep而这个公司创建了Foundation因此许多东西都是以NS开头的) Foundation框架中常用的类 1、NSString 有一个子类 NSMutableString NSString:不可变字符串 NSMutableString:可变字符串 (一)字符串的创建 NSString *s1 = @"jack"; NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d",10]; C字符串转为OC字符串 NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"] OC字符串转为C字符串 const char *cs = [s4 UTF8String]; 读取文件中的字符 NSString *s5 = [[NSString alloc] initWithContentOfFile:@"路径(绝对路径) 名"excoding:NSUTF8StringEncoding(编码方式,用到中文就可以用这种编码方式) error:nil]; 路径名格式:/Users/apple/Desktop/文件名 读取URL资源路径 //http://weibo.com/a.png 网络资源 协议头://路径(网络的是http) file://本地资源 ftp://FTP服务器上的 http://www.baidu.com NSURL *url = [[NSURL alloc] initWithString:@file:///Users/apple/Desktop/1.text]; NSURL *url2 = [NSURL fileURLWithPath:@"/Users/apple/Desktop/1.text"] NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil] 相应的类的方法(节省了alloc): [NSString stringWithFormat:@""]; [NSString URLString:@""] [NSString stringWithContentsOfFile] 把字符串写到文件中 文件中的换行可以使用/n [@"jack \n(换行)jack" writeToFile:@"/User/apple/Desktop/my.text" atomically:yes encoding:NSUTF8StringEncodingerror:nil] 对应的类方法 NSString *str = @"i love anglelababy"; NSURL *url = [NSURL fileURLwithPath:@"/User/apple/Desktop/my.txt"] [str writeToURL:url atomically:YES encoding:NSUTF8StingEncoding error:nil] NSMutableString:可变字符串 创建方法: NSMutableString *s1 = [NSMutableString stringWithFormat:@"age is 10"]; NSString *s2 = [NSString stringWithFormat:@"age is10";] NSLog("s1=%@ s2 = %@",s1,s2);输出结果相同 [s1 appendSting:@"11 12"];//拼接内容至s1后面 NSString *s3 = [s1 stringByAppendingString:@"11 12"];//补修改s1 而是新创建了一个字符串讲后面的字符拼接到这上面 [s1 deleteCharactersInRange(NUSInteger loc,NSUInteger len)]//删除字符串中的某个字符位置长度 [s1 deleteCharactersInRange(4,2)]//删除is 另一种方法: NSRange range = [s1 rangOfString:@"is"]; [s1 deleteCharactersInRange:range]; 集合类: 2、NSArray 不可变数组: 创建: OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等 只要是OC对象什么类型都可以放 OC数组不能存放空值 //这个Array永远是空数组 NSArray * array1 = [Array array]//数组只有在初始化的时候才能放东西 NSArray *array2 = [NSArray arrayWithObject:@"jack"];object没有s NSArray *array3 = [NSArray arrayWithObjects:@"jack",@"rose",nil];//nil是数组元素结束的标志 objects有S [array2 count];返回数组中元素的个数 NSLog(@"%ld",array3.count); [array3 objectAtIndex:1]访问数组中的某一个元素 array3[1]取出数组中下标为1的元素 同上一句功能 NSArray *array4 = [NSArray arrayWithObject:@"jack",@"rose",@"1234",nil]; //快速创建一个NSArray对象 NSArray *array4 = @[@"jack",@"rose",@"1234"]; OC数组 不问什么类型都可以往里放也不一定要一个类型的 遍历数组 Person *p = [[Person alloc] init]; NSArray *array = @[p,@"jack"]; for(int i =0;i<array.count;i++) { NSLog(@"%@",array[i]); } //遍历数组中的哪一个元素 将数组中的每个元素取出来赋给obj for(id obj in array) { //返回obj在数组中的位置 NSUInteger i = [array indexOfObject:obj] NSLog(@"@",obj); } [array enumerateObjectsUsingBlock: //每遍历到一个元素就会调用一次block //并且当前元素和索引位置当做参数传给block ^(id obj,NSUInteger idx,BOOL *stop) { //obj当前元素 idx当前变量的索引位置,stop停止遍历 NSLog(@"%ld --%@",idx,obj); //如果需要停止遍历 if(idx == 0) { *stop = YES; } }]; 实现过程: void ^(myblock)(id,NSUInteger,BOOL *) = ^(id obj,NSUInteger,BOOL *stop) { NSLog(@"%ld --%@",idx,obj); //如果需要停止遍历 if(idx == 0) { *stop = YES; } }]; for(int i= 0;i< array.count;i++) { //用来标记是否需要停止遍历 BOOL isStop = NO; //取出元素 id obj = array[i]; myblock(obj,i,&isstop); } 练习:计算代码行数: 考察NSString和NSArray的使用 NSFileManager 设计代码计算代码行数 //计算单个文件的代码行数 path:文件的全路径 返回值:int 代码行数 int codeLineCount(NSString *path){ //取出路径中的字符串 NSString *content = [NSString stringWithContentsOfFile:path encoding :NSUTF8StringEncoding error:nil]; //把文件内容分割开分割符为'\n'分开 NSArray *array = [content compentsSeparatedByString:@"\n"]; //验证 输入数组的每一行 for(NSString *line in array) { NSLog(@"%@",line); i++; } return array.count; } NSFileManager:文件管理者 //1、获得文件管理者 NSFileManager *mgr = [NSFileManager defaultManager]; //2、判断path是文件夹还是文件路径 BOOL dir = NO;//标记是否为文件夹 //这个路径是否存在 BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir]; if(!exist) { NSLog(@"路径不存在"); return 0; } if(dir) { NSLog(@"这是个文件夹"); //array数组存放该文件夹下的文件或文件夹的名称 NSArray *array = [mgr contentsOfDirectoryAtPath:patherror:nil]; //遍历数组中的所有文件或者文件夹名 for(nsstring *filename in array) { //拼接全路径 nsstring *fullpath = [nsstring stringwithformat:@"%@/ %@",path,filename]; codelinecount(fullpath); } } else { //加载文件内容 //将文件分割为每一行 } 有一个子类 NSMutableArray 创建: NSMutableArray *array = [NSMutableArray array]; NSMutableArray *array = [NSMutableArray arrayWithObject:@"rose",@"jim",nil]; NSMutableArray *array = @[@"jack",@"rose"]; 错误 后面的@[]只能返回不可变的数组的元素因此 不符合条件 添加元素: [array addObject:[[Person alloc] init]]; [array addObject:@"jack"]; [array addObject:nil]错误 OC数组不可添加基本数据类型 删除数组元素 删除所有:[array removeAllObject]; 删除指定元素[array removeObject:@"jack"]; 删除指定位置的元素:[array removeObjectAtIndex:2]; 3、NSSet 可以存放多种类型的对象,除了基本数据类型 但是存储是无序的 创建一个set NSSet *set = [NSSet set]; NSSet *set = [NSSet setWithObject:@"jack"];//不能放空值 NSSet *set = [NSSet setWithObjects:@"jack",@"rose",nil]; NSLog(@"%d",set.count); NSString *s = [set anyObject];//随机取出一个元素 有一个子类 NSMutableSet NSMutableSet *set = [NSMutableSet set]; //增加元素 [s addObject:@"hack"]; //删除元素 [s removeObject:@"hack"]; NSSet与NSArray的对比 二者的共同点: 1、都是集合,都能存放多个OC对象 只能存放OC对象,不能存放非OC对象类型(基本数据类型,int char float等,结构体,枚举,) 本身都不可变 但是有一个可变的子类 2、不同点 NSArray 是有序的 NSSet是无序的 4、NSDictionary 字典:存放的是键值对(key,value) 不可以修改 作用: 根据索引 找到文字内容(key --->value) 创建: NSDictionary *d = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"]; id obj = [dict objectForKey:@"name"]; NSArray *keys = @[@"name",@"address"]; NSArray *object = @[@"jack",@"北京"]; NSDictionary *d = [NSDictionary dictionaryWithObject:object forKey:keys]; NSDictionary *d = [NSDictionary dictionaryWithObjectAndKeys:@"jack",@"name",@"北京",@"address",@"1223435246",@"qq"]; NSDictionary *d = @[@"name":@"jack",@"address",@"北京",@"qq",@"23438529"]; 根据key找object id obj = [dict objectForKey:@"name"]; id obj = dict[@"name"]; //返回键值对的个数 dict.count 有一个子类NSMutableDictionary //创建 NSDictionary *d = [NSDictionary dictionary]; //添加键值对 [dict setObject:@"jack" forKey@"name"]; [dict setObject:@"北京" forKey@"address"]; [dict setObject:@"rose" forKey:@"name"]; //根据键值取数据 dict[@"name"]; //移除键值对 [dict removeObjectForKey:(id)]; 打印字典内容 结果以:name=" " address=""形式打印 字典的遍历(字典不允许有相同的key但是可以有相同的object) NSDictionary *d = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"]; 方法1:for循环 现获取所有的key放于数组中 在挨个根据key取object 方法2: [dict enmueratekeysandobjectsusingblock:^(id key,id,obj,bool *stop) { nslog(@"%@---%@",key,obj); }]; 集合总结: 1、NSArray\NSMutableArray *有序 *快速创建@[obj1,obj2,obj3] *快速访问元素:数组名[i] **** 2、NSSet\NSMutableSet *无序 *快速创建: * 3、NSDictionary\NSMutableDictionary *无序 *快速创建:@{key1:value1,,} *快速访问元素:字典名[key] NSArray *persons =@{ @{@"name":@"jack",@"qq":@"79475928"}, @{@"name":@"rose",@"qq":@"794755628"}, @{@"name":@"lee",@"qq":@"794734528"}, @{@"name":@"wong",@"qq":@"79473228"}, } 则: NSLog(@"%@",person[1][@"qq"]); 取出1位置对应的字典 再取字典中qq这个key对应的数据 NSNumber OC集合不支持基本数据类型 因此需要进行包装 作用:完成基本数据类型转为对象 NSNumber *num = [NSNumber numberWithInt:10]; 对象类型再转换回基本数据类型 int a =[num intValue]; int a= 20; NSString *s = [NSString stringWithFormat:@"%d",a]; 实现将int基本数据类型转换为NSString对象类型 int a = [s intValue] 在实现 将NSString对象数据类型转换为基本数据类型int @+(数字 字符):自动将数字包装秤一个NSNumber对象 int age =20; @(age);将int基本数据类型包装成NSNumber NSValue NSNumber之所以可以实现包装基本数据类型为对象是因为他继承了NSValue; NSNumber的缺点是只能包装数字和字符类型的 那么其他基本数据类型将有NSValue来包装 例如将 结构体包装 CGPoint p = CGPointMake(10,10); NSValue *values = [NSValue valueWithPoint:p]; 将value转为对应的结构体 [value pointValue]; NSDate //创建 NSDate *date = [NSDate date]; //date的默认值是执行上一句时的时间(默认格林尼治时间) NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date] date2的时间比date的时间玩5s NSTimeInterval seconds = [date2 timeIntervalSince1970]; 从1970年开始走过的秒数 [date2 timeIntervalSinceNow]//代码执行到现在的时间 日期格式化“ NSDate *date = [NSDate date]; //要想在手机屏幕上显示时间 就必须先把他转换为字符串 日期格式化类 NSDateFormat *formatter = [[NSDateFormatter alloc] init]; 日期格式:y年 M 月 d 日 h(12)H(24) 时 m 分 s 秒 formatter.dateFormat = "yyyy-MM-dd hh:mm:ss" @"2011-09-18" NSString *str = [formatter stringFromDate:date]; 字符串转日期 NSString *time = @"2011\09\10 18:56"; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyy/MM/dd hh:mm:ss" NSDate *date = [formatter dateFromString:time];
相关文章推荐
- iOS学习笔记:Object-C基础语法(OC介绍与Foundation初步)
- ios学习路线_OC基础语法
- IOS学习---OC基础学习4
- OC基础:类和对象 分类: ios学习 OC 2015-06-12 18:55 17人阅读 评论(0) 收藏
- OC基础:内存(内存管理) 分类: ios学习 OC 2015-06-25 16:50 73人阅读 评论(0) 收藏
- OC基础:NSString NSNumber 分类: ios学习 OC 2015-06-17 17:55 77人阅读 评论(0) 收藏
- IOS学习---OC基础学习1
- oc学习笔记-set和get函数 基础(Foundation)面向对象之封装方法
- OC基础:实例变量和成员变量的区别 分类: ios学习 OC 2015-06-14 17:59 16人阅读 评论(0) 收藏
- 黑马程序员--ios基础--oc-foundation--NSString,NSArray与计算代码行数的练习
- OC基础:属性.点语法.KVC 分类: ios学习 OC 2015-06-24 17:24 61人阅读 评论(0) 收藏
- IOS学习之路--OC的基础知识
- IOS学习---OC基础学习(ARC 协议)
- OC基础:getter和setter,@public @protected @private 分类: ios学习 OC 2015-06-15 19:23 22人阅读 评论(0) 收藏
- IOS App入门开发进阶 第一课 OC语言基础学习
- IOS学习---OC基础学习3
- 黑马程序员-IOS学习笔记-OC基础OC简介及基本语法
- 黑马程序员-IOS学习笔记-OC基础OC类和对象
- OC基础:数组.字典.集 分类: ios学习 OC 2015-06-18 18:58 47人阅读 评论(0) 收藏
- OC基础:继承.初始化方法,便利构造器 分类: ios学习 OC 2015-06-16 19:27 84人阅读 评论(0) 收藏