IOS学习---OC基础学习(Foundation)

来源:互联网 发布:软路由软件 编辑:程序博客网 时间:2024/05/22 17:08
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=-1NSUInteger = 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);长和宽都为0CGRectZero == 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 的坐标是否是p1CGRectContainsRect(CGRect r2,CGRect r3)判断CGRect对象 r2 的尺寸是否为s2使用上面这些函数的前提是添加CoreGraphics框架(小知识: 话说乔布斯 被苹果赶出去的那段时间 创建了一个公司叫做 NextStep而这个公司创建了Foundation因此许多东西都是以NS开头的)Foundation框架中常用的类1、NSString有一个子类 NSMutableStringNSString:不可变字符串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.comNSURL *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没有sNSArray *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]);}//遍历数组中的哪一个元素 将数组中的每个元素取出来赋给objfor(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可以存放多种类型的对象,除了基本数据类型 但是存储是无序的创建一个setNSSet *set = [NSSet set];NSSet *set = [NSSet setWithObject:@"jack"];//不能放空值NSSet *set = [NSSet setWithObjects:@"jack",@"rose",nil];NSLog(@"%d",set.count);NSString *s = [set anyObject];//随机取出一个元素有一个子类 NSMutableSetNSMutableSet *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找objectid 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基本数据类型包装成NSNumberNSValueNSNumber之所以可以实现包装基本数据类型为对象是因为他继承了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的时间玩5sNSTimeInterval 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];

0 0
原创粉丝点击