——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
Foundation类层次的根是NSObject类,它(和NSObject及NSCopying协议一起)定义了基本的对象属性和行为。Foundation框架是iOS开发的基础框架,其中包含了很多开发中的数据类型。
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
它有多种创建方式,如下
NSRange r1 = {1, 5};
NSRange r2 = {.location = 1, .length = 5};
NSRange r3 = NSMakeRange(1, 5);
在我们平时的使用中,并不会使用前两种方法,第三种是我们常用的方法。
Range的作用是查找目标的位置及长度,比如某个字符串在另一个字符串中的位置。
NSString *str = @"Hello World!!!";
NSRange range = [str rangeOfString:@"o W"];
NSLog(@"location = %d, length = %d", range.location, range.length);
当找不到这个字符串时,length = 0,location = NSNotFound = -1。
typedef struct _NSPoint {
CGFloat x;
CGFloat y;
} NSPoint;
创建方式:
NSPoint p1 = NSPointMake(10,10);
CGPoint p2 = CGMakePoint(10,10);
使用方法:
1、将结构体转为字符串
NSStringFromPoint(NSPoint *p);
2、表示原点
CGPointZero == CGPointMake(0, 0);
不过在使用CGPointZero等的时候需要添加CoreGraphics框架。
3、比较两点的位置
BOOL b = CGPointEqualToPoint(CGPointMake(5, 3), CGPointMake(3, 5));
typedef struct _NSSize {
CGFloat width;
CGFloat height;
} NSSize;
用法同NSPoint,它表示宽和高。
typedef struct _NSRect {
NSPoint origin;
NSSize size;
};
用法当然也是同内部两个结构体一样的。
在开发中常用的类有NSString,NSArray,NSSet,NSDictionary,NSDate。其中NSString、NSArray、NSSet和NSDictionary有可变类,如NSMutableString。
// 直接创建
NSString *s1 = @"jack";
// 基本已不使用
NSString *s2 = [[NSString alloc] initWithString:@"jack"];
// 通过格式化创建
NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d", 10];
// C字符串转化为OC字符串
NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"];
// OC字符串转化为C字符串
const char *cs = [s4 UTF8String];
// 从文件读取
NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil];
// 由URL创建,两种创建URL的方式
NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/alin/Desktop/1.txt"];
NSURL *url = [NSURL fileURLWithPath:@"/Users/alin/Desktop/1.txt"];
NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
在我们的框架中提供了和对象方法对应的类方法,在开发时我们一般使用类方法。
上面是从文件读取字符串,如果想把字符串写进文件,可以如下:
// 字符串写入文件
[@"要写入的字符串" writeToFile:@"/Users/alin/Desktop/my.txt"
atomically:YES encoding:NSUTF8StringEncoding error:nil];
atomically:YES : 表示如果中途写入失败,文件不会创建,安全性高。NO表示中途写入失败还会创建文件。
2、NSMutableString:代表可变字符串,创建后可以随时改变,与NSString不同的是,NSString里面的字符串一经初始化,就不可改变。如下:
NSMutableString *s1 = [NSMutableString stringWithFormat:@"123"];
// 在字符串后添加字符串
[s1 appendString:@"456"];
// 删除指定范围的字符串”5”
[s1 deleteCharactersInRange:NSMakeRange(4,1)];
// 删除固定字符串”23”
NSRange range = [s1 rangeOfString:@"23"];
[s1 deleteCharactersInRange:range];
// 创建一个新字符串,原来的没改变
NSString *s2 = @"134";
NSString *s3 = [s2 stringByAppendingString:@"678"];
NSLog(@"%@",s3);
// NSArray是不可变数组,所以这个array永远是空数组
// NSArray *array = [NSArray array];
// 通过单个对象创建
NSArray *array2 = [NSArray arrayWithObject:@"alin"];
// 通过多个对象创建,nil是数组元素结束的标记
NSArray *array3 = [NSArray arrayWithObjects:@"alin", @"阿青", nil];
// 快速创建一个NSArray对象
NSArray *array4 = @[@"alin", @"阿青", @"阿婷"];
// 获取数组里面对象的个数
NSLog(@"%ld", array3.count);
// 通过objectAtIndex方法访问
NSLog(@"%@", [array3 objectAtIndex:1]);
// 通过下标快速访问
NSLog(@"%@", array3[0]);
2、NSArray的遍历
*使用for循环遍历:
for (int i = 0; i<array.count; i++)
{
NSLog(@"%@", array[i]);
}
*使用for(…in…)遍历:
for (id obj in array)
{
NSLog(@"%@", obj);
}
*使用enumerateObjectsUsingBlock方法遍历:
// 每遍历一个对象,调用一次Block,并且将对象obj和对象的索引idx传递给Block
array enumerateObjectsUsingBlock:
^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%ld---%@", idx, obj);
// 可以控制停止遍历
if (idx == 1)
{
stop = YES;
}
}];
3、使用NSMutableArray来创建数组
// 创建NSMutableArray
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];
// 错误写法, 因为@[]创建的是NSArray
NSMutableArray *array = @[@"jack", @"rose"];
NSSet *s = [NSSet set];
// 创建
NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];
// 随机拿出一个元素
NSString *str = [s2 anyObject];
// 输出每个元素
NSLog(@"%@", str);
// 元素个数
NSLog(@"%ld", s2.count);
3、NSMutableSet的使用
NSMutableSet *s = [NSMutableSet set];
// 添加元素
[s addObject:@"hack"];
// 删除元素
[s removeObject:<#(id)#>];
// 创建单个对象
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
// 通过键集合数组和值集合数组创建
NSArray *keys = @[@"name", @"address"];
NSArray *objects = @[@"jack", @"北京"];
NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
// 创建多个对象,注意使用nil结束
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
"white-space:pre"> @"jack", @"name",
"white-space:pre"> @"北京", @"address",
"white-space:pre"> @"32423434", @"qq", nil];
// 快速创建方法
NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};
// 访问对象
id obj = [dict objectForKey:@"name"];
// 快速访问对象
id obj = dict[@"name"];
NSLog(@"%@", obj);
// 返回的是键值对的个数
NSLog(@"%ld", dict.count);
3、NSMutableDictionary的基本使用:
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
// 添加键值对
[dict setObject:@"jack" forKey:@"name"];
[dict setObject:@"北京" forKey:@"address"];
// 为相同的key添加对象会覆盖原来的对象
[dict setObject:@"rose" forKey:@"name"];
// 移除键值对
[dict removeObjectForKey:<#(id)#>];
// 错误写法,@{}创建的是不可变字典
NSMutableDictionary *dict2 = @{@"name" : @"jack"};
[dict2 setObject:@"rose" forKey:@"name"];
// 直接输出字典
NSLog(@"%@", dict);
4、字典的遍历
NSDictionary *dict = @{
@"address" : @"北京",
@"name" : @"jack",
@"name2" : @"jack",
@"name3" : @"jack",
@"qq" : @"7657567765"};
// 使用for循环遍历
// 取出所有Key
NSArray *keys = [dict allKeys];
for (int i = 0; i.count; i++)
{
NSString *key = keys[i];
NSString *object = dict[key];
NSLog(@"%@ = %@", key, object);
}
// 使用Block遍历,用法和数组Block遍历类似
[dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop) {
NSLog(@"%@ - %@", key, obj);
// 停止遍历
*stop = YES;
}];
// 包装基本数据类型
NSNumber *num = [NSNumber numberWithInt:10];
// 放入集合对象
NSDictionary *dict = @{
@"name" : @"jack",
@"age" : num
};
// 取出NSNumber对象
NSNumber *num2 = dict[@"age"];
// 转换成基本数据类型
int a = [num2 intValue];
NSLog(@"%d" , a);
// 快速包装,@20会自动将@后面的基本数据类型包装成OC对象
NSArray *array = @[
@{@"name" : @"jack", @"age" : @20},
@{@"name" : @"rose", @"age" : @25},
@{@"name" : @"jim", @"age" : @27}
];
// 将变量包装成NSNumber对象
int age = 100;
@(age);
2、NSValue
NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue。
NSValue使用如下:
CGPoint p = CGPointMake(10, 10);
// 将结构体包装成Value对象
NSValue *value = [NSValue valueWithPoint:p];
// 将value转为对应的结构体
[value pointValue];
typedef struct {
int year;
int month;
int day;
} Date;
现在我们使用NSDate对象来表示日期,它能为对象增加方法。
1、NSDate基本使用
// 创建一个时间对象
NSDate *date = [NSDate date];
// 打印出的时候是0时区的时间
NSLog(@"%@", date);
// 使用时间间隔创建
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
// 从1970开始走过的秒数
NSTimeInterval seconds = [date2 timeIntervalSince1970];
// 从date到现在经过的时间
[date2 timeIntervalSinceNow];
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";
// 格式化后的日期转为字符串
NSString *str = [formatter stringFromDate:date];
// 字符串转换为格式化日期
NSString *time = @"2015/01/27 15:32";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy/MM/dd HH:mm";
NSDate *date = [formatter dateFromString:time];
NSLog(@"%@", date);
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-