初窥Foundation框架
来源:互联网 发布:大数据 精准医疗 ppt 编辑:程序博客网 时间:2024/05/22 03:41
一、结构体
1、NSRange(location,length)
用NSRange来表示所在位置以及长度
NSString *str = @"love you"; NSRange range = [str rangeOfString:@"love"]; NSLog(@"loc = %ld,length = %ld",range.location,range.length );
打印出来的结果是:loc = 0 , length = 4,表示“love”是从位置0开始,长度为4
NSRange有一个快速创建的方法:NSRange range = NSMakeRange(2,4);
2、NSPoint/CGPoint
用NSPoint或CGPoint来表示点的位置(x,y)
// 点的位置 CGPoint p = {0,2}; p.x = 10; p.y = 20; // 直接调用函数 CGPoint p1 = CGPointMake(20, 30); // 将结构体转为字符串 NSString *str3 = NSStringFromPoint(p1); NSLog(@"%@",str3);
打印出来的结果是:{20,30}
// 表示原点 CGPoint P2 = CGPointZero; // 将CGPoint类型转为NSString类型 NSString *str5 = NSStringFromPoint(P2); NSLog(@"%@",str5);
打印出来的结果是:{0,0}
判断两个点是否重叠
BOOL pl = CGPointEqualToPoint(p, p1); NSLog(@"%d",pl);
打印出的结果是:0
3、NSSize/CGSize
用CGSize来表示长宽
// 长度和宽度 CGSize s = {10,20}; s.width = 20; s.height = 30; // 将结构体转为字符串 NSString *str4 = NSStringFromSize(s); NSLog(@"%@",str4); CGSize s1= CGSizeMake(20, 30); // 判断长宽是否相等 BOOL sl = CGSizeEqualToSize(s, s1); NSLog(@"%d",sl);打印出的结果分别为{20,30} 和 1
4、NSRect/CGRect
用CGRect来表示点位置和长宽
// 点位置和长宽 CGRect c = {2,3,4,5}; c.origin = p; c.size = s; // 将结构体转为字符串 NSString *str2 = NSStringFromRect(c); NSLog(@"%@",str2); CGRect c1 = CGRectMake(3, 4, 5, 6); // 判断一个区域是否包含某个点 BOOL cl = CGRectContainsPoint(c1, p); NSLog(@"%d",cl);打印出的结果分别为{{10,20},{20,30}} 和 0
二、NSString与NSMutableString
1、NSString
NSString为不可变字符串,即创建了一个字符串对象之后该字符串不可改变
/**创建字符串*/ NSString *str = @"cx";// NSString *str = [[NSString alloc] initWithString:@"wj"]; NSString *str1 = [NSString stringWithFormat:@"name = %@",str]; /**C-OC字符串转换*/ // C字符串->OC字符串 NSString *str2 = [[NSString alloc] initWithUTF8String:"cx"]; // OC字符串->C字符串 const char *str3 = [str2 UTF8String];
// URL:资源路径 // 协议头 ://路径 // file:// ->文件资源,本地资源 // ftp:// // 两种获得url的方式 NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/c_xie/Object-C/ios.txt"]; NSURL *url1 = [NSURL fileURLWithPath:@"/Users/c_xie/Object-C/ios.txt"]; // 通过获取文件路径读取字符串 NSString *url_1 = @"//Users/c_xie/Object-C/ios.txt"; NSString *str6 = [NSString stringWithContentsOfFile:url_1 encoding:NSUTF8StringEncoding error:nil]; // 通过URL获取资源 NSString *str5 = [[NSString alloc] initWithContentsOfURL:url1 encoding:NSUTF8StringEncoding error:nil]; NSString *str7 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; NSLog(@"%@",str7);
字符串导出到新文件
[@"cx,wj" writeToFile:@"/Users/c_xie/myFile.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil]; // \n为换行符 NSString *str8 = @"wj\ncx"; NSURL *url2 = [NSURL fileURLWithPath:@"/Users/c_xie/myFile1.txt"]; [str8 writeToURL:url2 atomically:YES encoding:NSUTF8StringEncoding error:nil];
2、NSMutableString
NSMutableString为可变字符串,即创建了一个字符串之后可以进行修改操作
NSMutableString *mstr = [NSMutableString stringWithFormat:@"my age is 10"]; [mstr appendString:@" 10,11"]; NSLog(@"mstr=%@",mstr);
删除某个范围内的字符串
// 用Range来确定范围 NSRange r = NSMakeRange(4, 2); [mstr deleteCharactersInRange:r]; NSLog(@"mstr=%@",mstr); NSRange r1 = [mstr rangeOfString:@"is"]; [mstr deleteCharactersInRange:r1]; NSLog(@"mstr=%@",mstr);
NSString类型的字符串可以有添加操作,但会产生新的对象
NSString *str9 =@"my name is cx"; // 生成一个新的字符串 NSString *str0 = [str9 stringByAppendingString:@" 10 11"]; NSLog(@"mstr=%@",str0);
三、NSArray与NSMutableArray
1、NSArray可变数组
/* C语言数组 */ int number[] = {0,1,2,3,4}; Person *p = [[Person alloc] init]; Person *p1 = [[Person alloc] init]; Person *person[] ={p,p1}; /* 不可变数组:NSArray */ // 1、创建数组 NSArray *array = [NSArray arrayWithObject:@"jack"]; // nil是数组元素的结束符 NSArray *array1 = [NSArray arrayWithObjects:@"jack",@"tom", nil]; // 快速创建一个array对象 NSArray *array2 = @[@"marry",@"mike",@"tmd"]; // NSArray的元素个数 [array2 count]; NSLog(@"%ld",array2.count); // NSArray元素的访问 NSLog(@"%@",[array1 objectAtIndex:1]); NSLog(@"%@",array2[0]);
2、遍历数组
for循环遍历
for (int i = 0; i<array2.count; i++) { NSLog(@"%@",array2[i]); }
快速遍历
for(id obj in array2) { //count++; NSUInteger count1 = [array2 indexOfObject:obj]; NSLog(@"---%ld----%@",count1,obj); }
用enumerateObjectsUsingBlock方法遍历
[array2 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"====%ld====%@",idx,obj); if(idx == 1) { // 停止循环 *stop = YES; } }];</span>enumerateObjectsUsingBlock遍历原理
// 每遍历到一个元素就会调用一次block,并且当前元素和索引位置传给block // ^(id obj, NSUInteger idx, BOOL *stop)会被转为 void (^myBlock)(id,NSUInteger,BOOL*) = ^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"====%ld====%@",idx,obj); if(idx == 1) { // 停止循环 *stop = YES; } }; // enumerateObjectsUsingBlock中依然有个for循环 for (int j = 0; j<array2.count; j++) { // 用来标记是否需要停止遍历 BOOL isStop = NO; id obj = array[j]; myBlock(obj,j,&isStop); // BOOL* 是个指针参数,必须传入地址才能修改isStop这个变量的值 if (isStop) { break; } }
3、NSMutableArray不可变数组
NSMutableArray *array3 = [NSMutableArray arrayWithObjects:@"me",@"you",nil]; // 添加元素 [array3 addObject:@"he"]; [array3 addObject:[[Person alloc] init]]; [array3 addObjectsFromArray:array1]; // 删除元素 [array3 removeAllObjects]; // 删除指定元素 [array3 removeObject:@"he"]; [array3 removeObjectAtIndex:0];
四、NSSet与NSMutableSet
1、NSSet:可变的
NSSet *s = [NSSet set]; NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil]; // 随机拿出一个元素 NSString *str = [s2 anyObject]; NSLog(@"%@", str); // 获取set中元素的个数 NSLog(@"%ld", s2.count);
2、NSMutableSet:不可变的
NSMutableSet *s = [NSMutableSet set]; // 添加元素 [s addObject:@"jack"]; // 删除元素 [s removeObject:@"jack"];
3、NSSet和NSArray的对比
共同点:都是集合,都能存放多个OC对象且只能是存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举),NSSet和NSArray本身都不可变,都有一个可变的子类
不同点:NSArray有顺序,NSSet没有顺序
五、NSDictionary与NSMutableDictionary
1、NSDictionary
NSDictionary被成为OC字典,且不可变
创建NSDictionary
NSDictionary *dir = [NSDictionary dictionaryWithObject:@"cx" forKey:@"name"]; id obj = [dir objectForKey:@"name"]; NSLog(@"%@",obj); NSArray *values = @[@"cx",@"bt",@"333"]; NSArray *keys = @[@"name",@"address",@"phone"]; NSDictionary *dic = [NSDictionary dictionaryWithObjects:values forKeys:keys]; NSLog(@"%@",dic); NSLog(@"%@",dic[@"address"]);
快速创建字典
NSDictionary *dict = @{@"name" : @"cx",@"address" : @"bt"}; NSLog(@"%@",dict[@"address"]);</span>
遍历字典
NSArray *array = [dict allKeys]; for (int i = 0; i<dict.count; i++) { NSLog(@"%@ = %@",array[i],dict[array[i]]); } [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"%@ = %@",key,obj); }];
2、NSMutableDictionary
NSMutableDictionary为可变字典
NSMutableDictionary *dic1 = [NSMutableDictionary dictionary]; [dic1 setObject:@"sex" forKey:@"man"]; NSLog(@"%@",dic1); [dic1 removeObjectForKey:@"man"]; NSLog(@"-%@",dic1);
快速创建一个可变字典
NSArray *person = @[@{@"name":@"wj",@"address":@"sh",@"book":@[@"ios",@"j2ee"]},@{@"name":@"cx",@"address":@"sh"}]; NSString *Name = person[0][@"name"]; NSLog(@"%@",person[0][@"book"][0]); NSLog(@"%@",Name);
六、NSNumber
NSNumber可用来创建一个基本类型的对象
NSNumber *num = [NSNumber numberWithInt:10]; NSDictionary *dict = @{ @"name" : @"jack", @"age" : num }; NSNumber *num2 = dict[@"age"]; int a = [num2 intValue]; NSLog(@"%d" , a);快速创建一个NSNumber对象
// @20 将 20包装成一个NSNumber对像 NSArray *array = @[ @{@"name" : @"jack", @"age" : @20}, @{@"name" : @"rose", @"age" : @25}, @{@"name" : @"jim", @"age" : @27} ]; // 将各种基本数据类型包装成NSNumber对象 /*@10.5; @YES; @'A'; // NSNumber对象 @"A"; // NSString对象 */ // 将age变量包装成NSNumber对象 int age = 100; @(age); //[NSNumber numberWithInt:age]; NSNumber *n = [NSNumber numberWithDouble:10.5]; int d = [n doubleValue]; int a = 20; // @"20" NSString *str = [NSString stringWithFormat:@"%d", a]; NSLog(@"%d", [str intValue]);
七、NSDate
使用NSDate可快速创建一个时间对象
// 创建一个date对象 NSDate *date = [NSDate date]; // 打印出的是格林时间 0时区,北京在东8区,相差8个小时 NSLog(@"%@",date); // 在date的基础上加上5秒 NSLog(@"%@",[NSDate dateWithTimeInterval:5 sinceDate:date]); // 计算自1970年起到date走过的秒数 NSTimeInterval seconds = [date timeIntervalSince1970]; NSLog(@"%f",seconds);自定义日期格式
/**日期转为字符串*/ NSDate *date = [NSDate date]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; // 日期格式化 /* y:年 M:月 d:日 h:时(24小时制) H:时(12小时制) m:分 s:秒 */ formatter.dateFormat = @"yyyy-MM-dd hh:mm:ss"; // 将日期转为字符串 NSString *str = [formatter stringFromDate:date]; NSLog(@"%@",str); /**字符串转为日期*/ NSString *time = @"2011/09/10 18:56"; NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init]; formatter1.dateFormat = @"yyyy/MM/dd HH:mm"; NSDate *date1 = [formatter1 dateFromString:time]; NSLog(@"%@",date1);
八、NSValue
使用NSValue可以实现将结构体转为对象,以实现将结构体放入数组
// 结构体 -> OC对象 CGPoint p = CGPointMake(10, 10); // 将结构体转为Value对象 NSValue *value = [NSValue valueWithPoint:p]; // 将value转为对应的结构体 CGPoint p1 = [value pointValue]; // 实现将结构体放入数组 NSArray *array = @[value]; NSLog(@"%@",array); return 0;
九、编写一个小程序计算文件中代码的行数
#import <Foundation/Foundation.h>NSUInteger codeLineCount(NSString *path);int main(){ NSString *path = @"/Users/c_xie/OC程序"; NSUInteger count = codeLineCount(path); NSLog(@"%ld",count); return 0;}NSUInteger codeLineCount(NSString *path){ // 1、获得文件管理者 NSFileManager *mdr = [NSFileManager defaultManager]; // 2、判断文件是否存在以及是否是文件夹 BOOL isdir = NO; BOOL exit = [mdr fileExistsAtPath:path isDirectory:&isdir]; // 修改变量需传入isdr的地址!! // 不存在,返回 if(!exit) return 0; // 传入的文件是个目录directory(文件夹) if (isdir) { // 3、获取目录下的所有文件名 NSArray *file = [mdr contentsOfDirectoryAtPath:path error:nil]; __block int count = 0; // 代码行数 // Variable is not assignable (missing __block type specifier) 可变因素不可分配(缺少__block类型区分符) __block NSString *fullPath; [file enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { fullPath = [NSString stringWithFormat:@"%@/%@",path,obj]; // 不要漏写“/” // 4、回调函数 count += codeLineCount(fullPath); //NSLog(@"%@",fullPath); }]; return count; } else { // 获得文件的后缀名并转为小写字母 NSString *extension = [[path pathExtension] lowercaseString]; // 过滤非.h,.m ,.c文件 if (!([extension isEqualToString:@"h"]||[extension isEqualToString:@"m"]||[extension isEqualToString:@"c"])) { return 0; } NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; NSArray *array = [str componentsSeparatedByString:@"\n"]; // 去掉路径中的/Users/c_xie/OC程序 NSRange range = [path rangeOfString:@"/Users/c_xie/OC程序/"]; NSString *str1 = [path stringByReplacingCharactersInRange:range withString:@""]; NSLog(@"%@ - %ld",str1,array.count); return array.count; }}
该程序的执行结果如下:
- 初窥Foundation框架
- Foundation框架
- Foundation框架
- Foundation框架
- Foundation框架
- Foundation框架
- Foundation框架
- Foundation框架
- Foundation框架
- Foundation框架
- Foundation框架
- foundation框架
- Foundation框架
- Foundation框架
- 黑马程序员------[Foundation]Foundation框架
- Core Foundation框架和Foundation框架
- Foundation框架中的数据类型
- Core Foundation 框架
- 2014下半年广西教师资格面试课程12月13日开班!
- try块和异常处理
- 【.NET】NuGet发布类库包,轻松管理dll文件
- bootstrap插件bootbox参数和自定义弹出框宽度设置
- 设计模式_单例模式
- 初窥Foundation框架
- iOS 归档
- 项目面试
- 函数
- 函数声明
- 第15周矩阵对角线之和
- uva 11137(硬币dp)
- IO标准库类型
- UITextfield placeholder