对Foundation内常用类和方法的研究
一.常用的结构体方法:
1.NSRange(由location 位置 和length长度 两个参数)
NSString *str = @"i love oc";
*如何表示 该字符串中love的范围? 有三种方法。
NSRange r1 = {2, 4};
NSRange r2 = {.location = 2, .length = 4};
NSRange r3 = NSMakeRange(2, 4); (常用)
*更加有效率的查找到指定字符串
// 先获取字符串的范围用NSrange类型存放
NSRange range = [str rangeOfString:@"java"];
// 用.location方法 得到位置 .length方法得到长度
NSLog(@"loc = %ld, length=%ld", range.location, range.length);
2.NSPoint(也可以写做CGPoint)
//CG开头的都是在CoreGraphic框架里定义的但是在Foundation框架里有声明
内部参数有 double X 和double Y
赋值方式:
CGPoint p1 = NSMakePoint(10, 10);
NSPoint p2 = CGPointMake(20, 20);
CGPointZero == CGPointMake(0, 0);
2.NSSize(也可以写做CGSize)
//主要用来表明尺寸
内部参数有 double weight 和 double weight
赋值方式:
NSSize s1 = CGSizeMake(100, 50);
CGSize s3 = NSMakeSize(200, 60);
3.NSRect(也可以写做CGRect,内部参数由CGPint和CGSize组成)
//由前两个参数组成 内部有X,Y,weight,height 四个参数
赋值方式:
CGRect r1 = CGRectMake(0, 0, 100, 50);
CGRect r2 = { {0, 0}, {100, 90}};
CGRect r3 = {CGPointZero, CGSizeMake(100, 90)};
内部数据的单独赋值(第一个点是get方法第二个点是set方法):
rect.origin.x = x;
// rect.origin.y = y;
// rect.size.width = width;
// rect.size.height = height;
4.常用方法
*比较两个点是否相同(x、y)
BOOL b = CGPointEqualToPoint(CGPointMake(10, 10), CGPointMake(10, 10));
BOOL b2 = CGRectContainsPoint(CGRectMake(50, 40, 100, 50), CGPointMake(60, 45));
*将结构体转化为字符串
NSString *str = NSStringFromPoint(p1);
NSString *str = NSStringFromSize(s3);
NSString *str = NSStringFromRect(r1);
NSLog(@"%@", str);
二.NSString的用法
种类:
NSString : 不可变字符串
NSMutableString : 可变字符串 可进行添加部分删除部分等方法
常用用法:
// *字符串的创建
NSString *s1 = @"jack";
NSString *s2 = [[NSString alloc] initWithString:@"jack"];
NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d", 10];
NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"];
// *拼接内容到s1的后面
NSMutableString *s1 = [NSMutableString stringWithFormat:@"my age is 10"];
[s1 appendString:@" 11 12"];
// *获取某字符串的范围然后修改
NSRange range = [s1 rangeOfString:@"is"];
[s1 deleteCharactersInRange:range];
// *字符串的导出
[@"Jack\nJack" writeToFile:@"/Users/apple/Desktop/my.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
三.NSArray
//和C语言字符串相比特点 可以把不同数据类型的对象存入数组
种类:
NSArray :不可变数组
NSMutableArray : 可变数组
常用用法:
// *1.NSArray的创建
NSArray *array2 = [NSArray arrayWithObject:@"jack"];
NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
NSArray *array4 = @[@"jack", @"rose", @"4324324"];(快速创建)
// *2.输出NSArray的元素个数
NSLog(@"%ld", array3.count);
// *3.NSArray中元素的访问
NSLog(@"%@", [array3 objectAtIndex:1]);
// *4.数组的遍历
Person *p = [[Person alloc] init];
NSArray *array = @[p, @"rose", @"jack"];
for (int i = 0; i<array.count; i++)
{
NSLog(@"%@", array[i]);
}
或
id obj代表着数组中的每一个元素
int i = 0;
for (id obj in array)
{
// 找出obj元素在数组中的位置
NSUInteger i = [array indexOfObject:obj];
NSLog(@"%ld - %@", i, obj);
//i++;
if (i==1)
{
break;
}
}
// *5.为可变数组添加与删除元素
array addObject:[[Person alloc] init]];
[array addObject:@"jack"];
[array removeObject:@"jack"];
[array removeObjectAtIndex:0];
四.NSSet 无序数组
1> 与NSArry共同点
* 都是集合,都能存放多个OC对象
* 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
* 本身都不可变,都有一个可变的子类
2> 不同点
* NSArray有顺序,NSSet没有顺序
种类:
NSSet :不可变数组
NSMutableSet : 可变数组
常用用法:
// *建立
NSSet *s = [NSSet set];
NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2"
// *随机拿出一个元素
NSString *str = [s2 anyObject];
NSLog(@"%@", str);
// *添加与删除元素
NSMutableSet *s = [NSMutableSet set];
[s addObject:@"hack"];
[s removeObject:<#(id)#>];
五.NSDictionary
字典不允许有相同的key,但允许有相同的value(Object)
字典的无序的
快速创建(不可变):@{key1 : value1, key2 : value2}
快速访问元素:字典名[key]
种类:
NSDictionary:不可变字典
NSMutableDictionary: 可变字典
常用用法:
// *建立
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
NSArray *keys = @[@"name", @"address"];
NSArray *objects = @[@"jack", @"北京"];
// *快速赋值
NSArray *persons = @[
@{@"name" : @"jack", @"qq" : @"432423423", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},
@{@"name" : @"rose", @"qq" : @"767567"},
@{@"name" : @"jim", @"qq" : @"423423"},
@{@"name" : @"jake", @"qq" : @"123123213"}
];
// 直接取出5分钟突破iOS编程
NSString *bookName = persons[0][@"books"][1];
NSLog(@"%@", bookName);
// *给可变字典添加与删除键值对
[dict setObject:@"jack" forKey:@"name"];
[dict setObject:@"北京" forKey:@"address"];
[dict setObject:@"rose" forKey:@"name"];
[dict removeObjectForKey:<#(id)#>];
六.NSNumber
用法:将各种基本数据类型包装成NSNumber对象
// *普通转化方法
NSNumber *num = [NSNumber numberWithInt:10];
NSDictionary *dict = @{
@"name" : @"jack",
@"age" : num
};
NSNumber *num2 = dict[@"age"];
int a = [num2 intValue];
NSLog(@"%d" , a);
// *快速转化方法
@25
@10.5;
@YES;
@'A'; // NSNumber对象
@"A"; // NSString对象
// *将age变量包装成NSNumber对象
int age = 100;
@(age);
七.NSDate
打印出的时候是0时区的时间(北京-东8区)
// *创建一个时间对象
NSDate *date = [NSDate date];
NSLog(@"%@", date);
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
// *把系统时间转化成自己设置日期格式
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString *str = [formatter stringFromDate:date];
NSLog(@"%@", str);
// *把自己输入的日期转换成系统格式。
NSString *time = @"2011/09/10 18:56";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy/MM/dd HH:mm";
NSDate *date = [formatter dateFromString:time];
NSLog(@"%@", date);