------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
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
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;
};
举例说明使用
//创建 size
NSSize size =NSMakeSize(10, 12);
CGSize size2 = CGSizeMake(11, 10);
//打印 size
NSLog(@"%@",NSStringFromSize(size2));
NSLog(@"%f,%f",size.width,size.height);
四.矩形 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对象
// 将各种基本数据类型包装成NSNumber对象
@10.5;
@YES;
@'A'; // NSNumber对象
//注意@'A'和@"A"的区别
@"A"; // NSString对象
九.NSDate
1.创建一个NSDate对象
// 创建一个时间对象
NSDate *date = [NSDate date];
// 打印出的时候是0时区的时间(北京-东8区)
NSLog(@"%@", date);
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
// 从1970开始走过的秒数
NSTimeInterval seconds = [date2 timeIntervalSince1970];
2.日期格式化
//日期格式化
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];
3.将制定格式的字符串转为date对象
// 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];
十.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];