------- android培训、java培训、期待与您交流!
===========结构体===========
NSRange(location length)
NSPoint/CGPoint
NSSize/CGSize
NSRect/CGRect
// // main.m // 01-结构体 // // Created by CH on 14-4-11. // Copyright (c) 2014年 itcast. All rights reserved. // #import <Foundation/Foundation.h> /* NSRange(location length) NSPoint/CGPoint NSSize/CGSize NSRect/CGRect */ int main(int argc, const char * argv[]) { BOOL b = CGPointEqualToPoint(CGPointMake(10, 10), CGPointMake(10, 10));//判断两个点是否相同 //依此类推,CGRect CGSize都又类似的方法 //CGSizeEqualToSize(CGSize size1, CGSize size2); //CGRectEqualToRect(CGRect rect1, CGRect rect2); BOOL b2 = CGRectContainsPoint(CGRectMake(50, 40, 100, 50), CGPointMake(230, 70));//reck中是否包含piont NSLog(@"%d",b2); return 0; } CGRect myRect1(CGFloat x,CGFloat y,CGFloat width,CGFloat height){ CGRect rect; rect.origin.x = x; rect.origin.y = y; rect.size.width =width; rect.size.height =height; return rect; } CGRect myRect2(CGPoint p,CGSize s){ CGRect rect; rect.origin.x = p.x; rect.origin.y = p.y; rect.size.width = s.width; rect.size.height = s.height; return rect; } void rect(){ //NSPoint==CGPoint==CGFloat==double /* struct CGPoint{ CGFloat x; CGFloat y; }; typedef struct CGPoint CGPoint; 开发中用CGPoint */ CGPoint p1 = NSMakePoint(10, 10); NSPoint p2 = CGPointMake(10, 10);//开发中最常用 NSSize s1 = CGSizeMake(100, 50); NSSize s2 = NSMakeSize(100, 50); CGSize s3 = NSMakeSize(100, 30); CGRect r1 = CGRectMake(0, 0, 100, 40); CGRect r2 = {{0,0},{100,90}}; CGRect r3 = {p1,s2}; //CGPointZero == CGPointMake(0, 0);//表示原点 //CGSizeZero; //CGRectZero; CGRect r4 = {CGPointZero,CGSizeMake(100, 60)}; //将结构体转成字符串 NSString *str1 = NSStringFromPoint(p1); NSString *str2 = NSStringFromSize(s3); NSString *str3 = NSStringFromRect(r1); NSLog(@"\n%@\n,%@\n,%@",str1,str2,str3); } void range(){ struct Date { int year; int month; int day; }; struct Date d = {2011,3,12}; struct Date d2 = {.month = 10, .year = 2013, .day = 23}; // @"i love oc" love 的范围 NSRange r1 = {2,4};//不用 NSRange r2 = {.location = 2, .length = 4};//不用 NSRange r3 = NSMakeRange(2, 4);//掌握 NSString *str = @"i love oc"; //如果找不到,length=0,location=NSNotFound==-1 NSRange range = [str rangeOfString:@"love"];//查找某个字符串在str中的范围 NSLog(@"location = %ld,length = %ld",range.location,range.length); }
===========字符串===========
NSString 不可变字符串:不能删除,增加
NSMutableString 可变字符串:可以修改
// // main.m // 02-NSString // // Created by CH on 14-4-11. // Copyright (c) 2014年 itcast. All rights reserved. // #import <Foundation/Foundation.h> /* NSString : 不可变字符串 NSMutableString : 可变字符串 */ int main() { //可变字符串 NSMutableString *s1 = [NSMutableString stringWithFormat:@"age is 20"]; //拼接内容到s1到后面 [s1 appendString:@"11,22"];//s1的值会变 //获取is的范围 NSRange range = [s1 rangeOfString:@"is"]; [s1 deleteCharactersInRange:range]; //[s1 deleteCharactersInRange:NSMakeRange(4,2)];一般不用 //不可变字符串 NSString *s2 = [NSMutableString stringWithFormat:@"age is 200"]; NSString *s3 = [s2 stringByAppendingString:@"123"];//拼接完返回新的字符串,s2本身不会改变 NSLog(@"\ns1 = %@,\ns2 = %@,\ns3 = %@",s1,s2,s3); return 0; } void stringExport(){ //字符串的导出 [@"jack \njack" writeToFile:@"/Users/ch/Desktop/my.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil]; NSString *str = @"1231"; NSURL *url = [NSURL fileURLWithPath:@"/Users/ch/Desktop/my2.txt"]; [str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil]; } void nSStringAll(){ //字符串的一些用法和NSURL NSString *s1 = @"jack"; NSString *s2 = [[NSString alloc] initWithString:@"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];//const 可以不写 //NSUTF8StringEncoding 用到中文就可以用这种编码 NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/ch/Downloads/test2.txt" encoding:NSUTF8StringEncoding error:nil]; //URL:资源路径 //协议头://路径 //本地文件: file:// //网络ftp服务器:ftp:// //http://weibo.com/a.png NSURL *url = [[NSURL alloc] initWithString:@"http://www.feilv.com"]; NSURL *url1 = [NSURL fileURLWithPath:@"/Users/ch/Downloads/test2.txt"]; NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; NSLog(@"s6:\n%@",s6); /*一般都会有一个类方法和对象方法配对,都是已对象名开头 [NSURl urlwithString:@""] [NSString stringWithFormat:@""]; NSString stringwithContentsOfFile */ }
===========数组===========
NSArray:不可变数组
// // main.m // 03-NSArray // // Created by CH on 14-4-11. // Copyright (c) 2014年 itcast. All rights reserved. // #import <Foundation/Foundation.h> /* NSArray : 不可变数组 NSMutableArray : 可变数组 */ int main() { Person *p = [[Person alloc] init]; NSArray *array = @[p,@"jack"]; //遍历方式一 for(int i = 0; i<array.count;i++){ NSLog(@"%@",array[i]); } //遍历方式二 for(id obj in array){ // NSUInteger i =[array indexOfObject:obj];//当前第几次 NSLOg(@"%@",obj); } //遍历方式三 [array enumerateObjectsUsingBlock:^(id obj,NSUInteger idx,BOOL *stop){ //idx表示索引位置,obj表示对象,stop是用来停止遍历的 NSLog(@"%ld - %@",idx,obj); if(idx==1){ *stop = YES;//停止了idx为1之后的对象 } }]; //遍历方法三原理: /*void ^(myblock)(id,NSUInteger,BOOL *)=^(id obj,NSUInteger idx,BOOL *stop){ NSLog(@"%ld - %@",idx,obj); if(idx==1){ *stop = YES; } }; for(int i = 0;i<array.count;i++){ //用来标记是否需要停止遍历 BOOL isStop = NO; //取出元素 id obj = array[i]; myblock(obj, i, &isStop);//传递地址,才能改变值 if(isStop){ break; } } */ return 0; } void baseuse(){ //oc数组只能存放oc对象,不能存放非oc对象类型,比如int,struct,enum等 /* 数组的创建 */ NSArray *array = [NSArray array];//这个array永远是空数组 //这是创建单个id的方式 NSArray *array2 = [NSArray arrayWithObject:@"jack"]; //这是创建多个id的创建方式 nil是数组元素结束的标记 NSArray *array3 = [NSArray arrayWithObjects:@"jack",@"rose", nil]; //创建多个值的数组 NSArray *array4 = [NSArray arrayWithObjects:@"jack",@"rose",@"Mike",@"Chenghao",nil]; //快速创建一个NSArray对象 NSArray *array5 = @[@"jack",@"rose",@"chegnhao"]; /* NSArray的元素个数和访问 */ //[array2 count];和以下方式都可以 NSLog(@"%ld",array3.count); NSLog(@"%@",[array3 objectAtIndex:1]);//这种不用 NSLog(@"%@",array3[1]);//以后都适用这种,编译器遇到这行,就自动转成上面的代码 }
NSMutableArray:可变数组
#import <Foundation/Foundation.h> int main(){ /* NSSet 和 NSArray对比: 1.共同点: >都是集合,都能存放多个OC对象 >只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float、结构体、 枚举等) >本身都不可改变,都有一个可变的子类 2.不同点 >NSArray有顺序,NSSet没有顺序 */ return 0; } void NSSet(){ NSSet *s = [NSSet set];//创建一个空的set,并且永远是空 NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose",nil]; [s2 anyObject];//随机拿出一个元素 } void NSMutableSet(){ NSMutableSet *s = [NSMutableSet set]; [s addObject:@"hack"];//添加元素 [s removeObject:(id)];//删除元素 } void NSMutableArray(){ //@[] 只创建不可变数组 NSArray NSArray *array = @[@"jack",@"rose"]; NSMutableArray *array2 = [NSMutableArray arrayWithObjects:@"rose",@"jim",nil];//初始化时添加成员 NSMutableArray *array = [NSMutableArray array]; //添加元素 [array addObject:[[Person alloc] init]; [array addObject:@"Jack"];可以随便放,但不能放基本数据类型 //[array addObject:10];不行 //删除元素 //[array removeAllObjects];//删除所有元素 //删除指定对象 [array removeObject:@"Jack"]; [array removeObjectAtIndex:2]; return 0; }
考察NSString和NSArray的使用:===========计算代码行数============
计算代码行数 //考察NSString、NSArray的使用 //NSFileManager #import <Foundation/Foundation.h> /* path:文件全路径 返回代码行数 */ NSUInteger codeLineCount(NSString *path){ //获取文件管理者 NSFileManager *mgr = [NSFileManager defaultManager]; //判断path是否是文件夹还是文件路径 BOOL dir = NO;//用来标记是否是文件夹 //判断路径是否存在 BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir]; //如果不存在,直接返回0 if(!exist){ NSLog(@"文件路径不存在"): return 0; } //不管传的path是文件夹还是文件,都能返回行数 if(dir){//=======================文件夹:遍历并递归 NSLog(@"这是个文件夹"); NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil]; int count = 0; for(NSString *filename in array){ NSLog(@">>>>>>>>>>>>>%@",filename);//每到一个目录文件夹就打印文件夹名 NSString *nextFullPath = [NSString stringWithFormat:@"%@/%@",path,filename]; count += codeLineCount(nextFullPath); } return count; } else{//===========================文件:判断扩展名并计数 NSLog(@"这是个文件"); //获取文件扩展名,并忽略大小写 NSString *extension = [[path pathExtension] lowercaseString]; //判断拓展名 if(!([extension isEqualToString:@"h"] ||[extension isEqualToString:@"m"] ||[extension isEqualToString:@"c"])){ NSLog(@"文件不是我们判断的类型就返回"); return 0; } //1.加载文件内容 NSString *content = [NSString stringWithContentOfFile:path encoding:NSUTF8StringEncoding error:nil]; //2.调用文件内容的分割为每一行方法,以回车换行符来分割 NSArray *array = [content componentsSeperatedByString:@"\n"]; NSRange range = [path rangeOfString:@"/Users/ch/Desktop/"]; NSString *str = [path stringByReplacingCharactersInRange:range withString:@""];//替换字符串 NSLog(@"%@ - %ld",path,array.count); //直接返回行数 return array.count; } } int main(){ int count = codeLineCount(@"/Users/ch/Desktop/"); NSLog(@""); return 0; } //测试分割方法 void testSeperated(){ NSString *str = @"java-andriod-ios-c"; NSString *str2 = @"jack\nrose\njim\njake"; //测试下写入到文件中的形式: [str2 writeToFile:@"/Users/ch/Destop/abc.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil]; NSArray *array = [str componentsSeperatedByString:@"-"]; for(NSString *s in array){ NSLog(@"%@",s); } }