1、NSRange\CGRange
NSRange r1 = {2, 4};
NSRange r2 = {.location = 2, .length = 4};
NSRange r3 = NSMakeRange(2, 4);
// string转range:
NSRange range = [str rangeOfString:@"abc"];
NSLog(@"location = %d, length = %d", range.location, range.length);
// range的成员类型为unsigned long
// range.location == NSUInteger == unsigned long
// 如果range在字符串中不存在,那么length=0,location=NSNotFound
// NSNotFound是一个枚举常量,值以%d打印为-1,以%ld打印为9223372036854775807
2、NSPoint\CGPoint || NSSize\CGSize || NSRect\CGRect
CGPoint p1 = NSMakePoint(10, 10);
NSPoint p2 = CGPointMake(20, 20); // 最常用
// 原点表示:(同理,size和rect都有zero常量)
CGPointZero == CGPointMake(0, 0)
NSSize s1 = CGSizeMake(100, 50);
NSSize s2 = NSMakeSize(100, 50);
CGSize s3 = NSMakeSize(200, 100);
CGRect r1 = CGRectMake(0,0,100,50);
// 打印CGRect如下:
NSLog(@"x=%f, y=%f, width=%f, height=%f", r1.origin.x, r1.origin.y, r1.size.width, r1.size.height);
// 但是上边的方法很麻烦,所以通常打印结构体会先将结构体转成字符串,再打印
// point转字符串:
NSString *str = NSStringFromPoint(p1);
NSLog(@"%@", str);
// size转字符串:
NSString *str2 = NSStringFromSize(s1);
// rect转字符串:
NSString *str3 = NSStringFromRect(r1);
// CGRect的另一种创建方式:
CGRect r2 = {{0, 0}, {100, 90}};
CGRect r3 = {p1, s1};
// 对比两个point是否相等:(同理,size和rect也有此方法)
Bool b = CGPointEqualToPoint(p1, p2);
3、NSString
// 把字符串输入到某个路径下的某个文件里
[@"java\njava" writeToFile:@"/Users/apple/Desktop/my.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
// 第二种方法:
NSString *str = @"ABCDEFG";
NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/my2.txt"];
[str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];
// NSMutableString可变字符串的使用:
NSMutableString *s1 = [NSMutableString stringWithFormat:@"age is 10"];
[s1 appendString:@" 11 12"]; // 在s1后面追加字符串
[s1 deleteCharactersInRange:NSMakeRange(4, 2)]; // 删除is
NSRange range = [s1 rangeOfString:@"is"];
[s1 deleteCharactersInRange:range];
// NSString的stringByAppendString方法生成一个新字符串,而不改变原来的字符串,因为NSString是不可变字符串
NSString *s2 = [NSString stringWithFormat:@"age is 10"];
NSString *s3 = [s2 stringByAppendString:@" 11 12"];
// 截取字符串方法
NSString *str = @"itcast";
NSString *str1 = [str substringWithRange:NSMakeRange(0, 4)];
NSLog(@"%@", str1); // 输出为“itca”
4、NSArray
// OC数组只能存放OC对象,不能存放非OC对象类型,比如int、struct、enum等
// 例如:
Person *p = [[Person alloc] init];
Person *person[5] = {p, [[Person alloc] init]};
// 永远是空数组,因为不可变
NSArray *array = [NSArray array];
// 一个元素
NSArray *array2 = [NSArray arrayWithObject:@"jack"];
// 多个元素,以nil为数组结束标记,所以不能存放nil(类似\0)
NSArray *array3 = [NSArray arrayWithObject:@"jack", @"rose", nil];
// 快速创建数组对象
NSArray *array4 = @[@"jack", @"rose", @"abcde"];
// 获取数组的元素个数
//[array3 count] == array3.count
// 获取某个下标下的元素
Nsstring *item = [array3 objectAtIndex:1];
// 简化写法
array3[1];
// 遍历数组
for(int i=0;i<array3.count;i++)
{
NSLog(@"%@", array3[i]);
}
// 遍历数组的简化写法
for(id obj in array3)
{
// 元素位置
int i = [array3 indexOfObject:obj];
// obj是元素
NSLog(@"%d-%@", i, obj);
}
// 数组遍历最简写法(利用block)
[array3 enumerateObjectsUsingBlock:
^(id obj, NSUInteger idx, BOOL *stop)
{
// idx为数组下标,obj为元素,stop为控制是否退出循环的变量地址
NSLog(@"%ld - %@", idx, obj);
// 当idx等于1时
if(idx == 1)
{
// 退出循环
*stop = YES;
}
}];
5、NSMutableArray
NSMutableArray *array = [NSMutableArray array];
[array addObject:[[Person alloc]init]];
[array addObject:@"jack"];
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil]; // 初始化数组
// 删除全部元素
[array removeAllObjects];
// 删除指定元素
[array removeObject:@"jack"];
[array removeObjectAtIndex:2];
5、NSSet/NSMutableSet(无序)
// NSSet是无序的,所以不可以使用s2[0]来取元素
NSSet *s = [NSSet set];
NSSet *s2 = [NSSet setWithObjects:@"jack", @"rose", nil];
NSString *str = [s2 anyObject];
NSMutableSet *s = [NSMutableSet set];
[s addObject:@"jack"]; // 添加元素
[s removeObject:@"jack"]; // 删除元素
6、NSDictionary(无序)
// 创建字典
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
// 获取字典里的内容
id *name = [dict objectForKey:@"name"];
// 使用数组创建字典:
NSArray *keys = @[@"name", @"address"];
NSArray *objects = @[@"jack", @"beijing"];
NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
// 取字典内容
id obj = [dict2 objectForKey:@"address"];
// 创建字典简化写法:
NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:
@"jack", @"name",
@"beijing", @"address", nil];
// 字典最简写法
NSDictionary *dict4 = @{@"name":@"jack", @"address":@"beijing"};
// 获取字典内容最简写法
id obj = dict4[@"name"];
// 获取键值对个数
unsigned long num = dict4.count;
7、NSMutableDictionary(无序)
// 创建NSMutableDictionary
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
// 添加键值对
[dict setObject:@"jack" forKey:@"name"];
[dict setObject:@"beijing" forKey:@"address"];
[dict setObject:@"rose" forKey:@"name"];
// 获取键值
NSString *str = dict[@"name"];
// 移除键值对
[dict removeObjectForKey:@"name"];
// 遍历
NSDictionary *dict = @{@"address":@"beijing", @"name":@"jack", @"qq":@"21341"};
NSArray *keys = [dict allKeys];
for(int i=0;i<dict.count;i++)
{
NSString *key = keys[i];
NSString *obj = dict[key];
}
// 遍历的简便方式(利用block)
[dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop) {
NSLog(@"%@ - %@", key, obj);
// 如果值等于jack
if(obj == @"jack")
{
// 退出循环
*stop = YES;
}
}];
8、NSNumber和NSValue
// 把基本数据类型封装成对象类型
NSNumber *num = [NSNumber numberWithInt:10];
NSNumber *num2 = [NSNumber numberWithDouble:10.5];
// 把对象类型转成基本数据类型
int i = [num intValue];
double d = [num2 doubleValue];
// 把字符串类型转成基本数据类型
NSString *str = [NSString stringWithFormat:@"%d", 20];
int a = [str intValue];
// 包装数据类型的简化写法
@20
@YES // YES是常量1
@'a' // 'a'是一个数字
// 把变量包装成NSNumber类型
int age = 25;
@(age); // 如果不加括号,编译器会认为@age是关键字,但是又没有这个关键字,所以会报错
// 将结构体包装成对象
CGPoint p = CGPoint(10, 10);
NSValue *value = [NSValue valueWithPoint:p];
// 将value转为对应的结构体
CGPoint p1 = [value pointValue];
9、NSDate
// 创建时间对象
NSDate *date = [NSDate date]; // NSDate是当前格林治时间
// 比date晚5秒
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
// 从1970年开始,到date2的秒数
NSTimeInterval seconds = [date2 timeIntervalSince1970];
// date2和现在的时间相差多少秒
NSTimeInerval seconds2 = [date2 timeIntervalSinceNow];
// 日期格式化类
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// y年M月d日
// m分s秒H(24)时h(12)时
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString *str = [formatter stringFromDate:date];
// 字符串日期转为NSDate
NSString *time = @"2011/09/10 18:56";
// formatter去适配字符串日期的格式
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy/MM/dd HH:mm";
// 根据formatter格式把字符串日期time转成NSDate类型的date
NSDate *date = [formatter dateFromString:time];