黑马程序员——OC中的Foundation
2015-10-12 07:17
387 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
Foundation—基础框架。框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础。
一.范围 NSRange
//NSRange的定义 typedef struct _NSRange { NSUIntegerlocation; NSUIntegerlength; } NSRange;
//创建一个NSRange NSMakeRange(NSUInteger loc, NSUInteger len) //判断一个点是否在里面 BOOL NSLocationInRange(NSUInteger loc, NSRange range) //判断是否相等 BOOL NSEqualRanges(NSRange range1, NSRange range2)
举例说明NSRange的用法
#import <Foundation/Foundation.h> int main() { //定义一个range NSRange range = NSMakeRange(0, 3); //输出range的location和length NSLog(@"%ld--%ld",range.location,range.length); //查找某个字符串再另一个字符串的范围 NSString *str = @"just a demo"; //查找 NSRange range2 = [str rangeOfString:@"a"]; //输出 NSLog(@"%ld,%ld",range2.location,range2.length); return 0; }
二.点 NSPoint和CGPoint
struct CGPoint { CGFloat x; CGFloat y; }; typedef struct CGPoint CGPoint;
举例说明使用
//NSPoint和CGPoint的创建类似 NSPoint point =NSMakePoint(10, 10); CGPoint point2 = CGPointMake(12, 12); //注意 x 和 y 是 double 类型 NSLog(@"%f,%f",point.x,point.y); NSLog(@"%f,%f",point2.x,point2.y); //判断两点是否相等 BOOL b = CGPointEqualToPoint(point, point2); NSLog(@"%d",b);
三.尺寸 NSSize和CGSize
struct CGSize { CGFloat width; CGFloat height; };
举例说明使用
<span style="font-weight: normal;"> //创建 size NSSize size =NSMakeSize(10, 12); CGSize size2 = CGSizeMake(11, 10); //打印 size NSLog(@"%@",NSStringFromSize(size2)); NSLog(@"%f,%f",size.width,size.height);</span>
四.矩形 NSRect和CGRect
struct CGRect { CGPoint origin; CGSize size; }; typedef struct CGRect CGRect;
常用方法举例
//创建 CGRect 和 NSRect NSRect rect = NSMakeRect(0, 0, 10, 10); CGRect rect2 = CGRectMake(0, 0, 5, 5); //判断两个 rect 是否相同 BOOL b = CGRectEqualToRect(rect, rect2); //判断一个 rect 是否包含另一个 rect BOOL b2 = CGRectContainsRect(rect, rect2); //判断点是否在 rect 内 BOOL b3 = CGRectContainsPoint(rect2, NSMakePoint(5, 5)); //打印判断结果 NSLog(@"%d,%d,%d",b,b2,b3);
五.字符串 NSString和NSMutableString
1.NSString//快速创建 NSString *str = @"this is just a demo"; //格式化创建 int a=2; NSString *str2 = [[NSString alloc]initWithFormat:@"this is a demo%d",a ]; NSString *str3= [[NSString alloc]initWithUTF8String:"just a demo"]; //从文件中加载 NSString *str4 = [[NSString alloc]initWithContentsOfFile:@"/Users/shmily/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil]; //从 url 中加载 NSURL *url = [NSURL URLWithString:@"file:///Users/shmily/Desktop/1.txt"]; NSString *str5 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; NSLog(@"%@\n%@\n%@\n%@\n%@",str,str2,str3,str4,str5);
2.NSMutableString
NSMutableStirng继承自NSString,所以NSString有的方法,NSMutableString都有,唯一不同的是,NSMutableString是可变字符串,当初始化完成后可以继续修改改字符串的内容,NSString是不可变字符串,一旦初始化完成,就不能再修改其内部的值.使用举例
NSMutableString *s1 = [NSMutableString stringWithFormat:@"my age is 10"]; // 拼接内容到s1的后面 [s1 appendString:@" 11 12"]; // 获取is的范围 NSRange range = [s1 rangeOfString:@"is"]; [s1 deleteCharactersInRange:range]; NSString *s2 = [NSString stringWithFormat:@"age is 10"]; //添加字符串到指定已有字符串 NSString *s3 = [s2 stringByAppendingString:@" 11 12"]; NSLog(@"s1=%@, s2=%@", s1, s2);
六.NSArray 和NSMutableArray
1.NSArray
不可变对象数组的使用//NSArray的创建 NSArray *array1 = [NSArray arrayWithObject:@"jack"]; // nil是数组元素结束的标记 NSArray *array2 = [NSArray arrayWithObjects:@"jack", @"rose", nil]; //快速创建一个NSArray对象 NSArray *array4 = @[@"jack", @"rose", @"4324324"]; //NSArray的元素个数 NSLog(@"%ld", array3.count); //NSArray中元素的访问 NSLog(@"%@", [array3 objectAtIndex:1]); //快速访问 NSLog(@"%@", array3[0]); }
2.NSMutableArray
可变对象数组的使用// @[] 只创建不可变数组NSArray // 常见错误写法 NSMutableArray *array = @[@"jack", @"rose"]; [array addObject:@"jim"];//因为快速创建的NSArrray是不可变的 // 可变数组的基本使用 NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil]; // 添加元素 [array addObject:[[Person alloc] init]]; [array addObject:@"jack"]; // 删除元素 [array removeAllObjects]; // 删除指定的对象 [array removeObject:@"jack"]; [array removeObjectAtIndex:0]; // 错误写法 // [array addObject:nil]; //nil是NSArray的结束标志
七.NSDictionary和NSMutableDictionary
1.NSDictionary
//字典的定义 //NSDictionary定义一个键值对 NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"]; //NSDictionary定义多个键值对 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: @"jack", @"name", @"北京", @"address", @"32423434", @"qq", nil]; //快速定义字典(只能用于不可变字典) NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"}; //字典的键值对获取 id obj = dict[@"name"];
2.NSMutableDictionary
NSMutableDictionary *dict = [NSMutableDictionary dictionary]; // 添加键值对 [dict setObject:@"jack" forKey:@"name"]; [dict setObject:@"北京" forKey:@"address"]; // 移除键值对 [dict removeObjectForKey:(id)]; // 字典不允许有相同的key,但允许有相同的value(Object) // 字典的无序的 NSDictionary *dict = @{ @"address" : @"北京", @"name" : @"jack", @"name2" : @"jack", @"name3" : @"jack", @"qq" : @"7657567765"}; //打印所有的字典的键值对 [dict enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) { NSLog(@"%@ - %@", key, obj); // *stop = YES; }];
八.NSNumber
1.将各种基本数据类型包装成NSNumber对象.
// 将age变量包装成NSNumber对象 int age = 100; @(age); //[NSNumber numberWithInt:age]; //将基本数据类型包装成NSNumber对象 NSNumber *num = [NSNumber numberWithInt:10]; NSNumber *n = [NSNumber numberWithDouble:10.5];
2.将NSNumber对象转化成基本数据类型
//将NSNumber对象转为基本数据类型 //转为int int a = [number intValue]; //转为double double d = [number doubleValue];
3.将基本数据类型快速包装成NSNumber对象
<span style="font-weight: normal;">// 将各种基本数据类型包装成NSNumber对象 @10.5; @YES; @'A'; // NSNumber对象 //注意@'A'和@"A"的区别 @"A"; // NSString对象</span>
九.NSDate
1.创建一个NSDate对象
<span style="font-weight: normal;">// 创建一个时间对象 NSDate *date = [NSDate date]; // 打印出的时候是0时区的时间(北京-东8区) NSLog(@"%@", date); NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date]; // 从1970开始走过的秒数 NSTimeInterval seconds = [date2 timeIntervalSince1970];</span>
2.日期格式化
<span style="font-weight: normal;">//日期格式化 NSDate *date = [NSDate date]; // 日期格式化类 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; // y 年 M 月 d 日 // m 分 s 秒 H (24)时 h(12)时 formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; //将date转化为formatter对应格式的字符串 NSString *str = [formatter stringFromDate:date];</span>
3.将制定格式的字符串转为date对象
<span style="font-weight: normal;">// 09/10/2011 NSString *time = @"2011/09/10 18:56"; //实现一个 NSDateFormatter NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; //设置日期格式 formatter.dateFormat = @"yyyy/MM/dd HH:mm"; //根据设置的日期格式将字符串转为日期 NSDate *date = [formatter dateFromString:time];</span>
十.NSValue
之前说过的NSNumber实际上是NSValue的一种特殊形式.NSValue可以将基本数据类型包装成OC对象.比如:
CGPoint p = CGPointMake(10, 10); // 将结构体转为Value对象 NSValue *value = [NSValue valueWithPoint:p];
我们可以看出,实际上使用NSValue转化的方法的命名格式为
NSValue *value = [NSValue valueWith + 对应的数据类型(int,point,rect等)];
将NSValue转化为基本数据类型的方式和NSNumber相似,可以总结为
基本数据类型 变量名 = [NSValue对象 基本数据类型 + Value];
相关文章推荐
- 黑马程序员——OC中的分类
- 黑马程序员——OC中的类
- 黑马程序员——面向对象的三大特性
- 黑马程序员——OC中的核心语法
- 黑马程序员-------Block
- 不想当一辈子码农,这有份IT民工进阶手册
- 程序员常去的6个头条分享站点
- 蜂窝教育软件工程师培训
- 山东润达软件:优秀程序员的18大法则
- 黑马程序员——Foundation---NSMutableArray
- java 面试题三十二 mysql查询面试题
- 黑马程序员——面向对象
- 《剑指Offer》面试题:平衡二叉树
- 面试题32:从1到n整数中1出现的次数
- 黑马程序员——JavaSE之对单例枚举和反射的看法一
- 今天面试了两个程序猿(二)
- 也许每个农村出来的码农都有个田园梦
- [京东 + 华为面试 + 金山笔试]自己总结
- 面试,一点小心得
- 从Lumia退役看为什么WP走向没落(从程序员与市场开发的角度,讲的真棒!)