------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
NSArray
不可变数组,只能存放OC对象,不能存放非OC对象
数组创建:
// 这个array永远是空数组,需要在创建的时候进行初始化
NSArray *array = [NSArray array];
// 初始化单个数组元素
NSArray *array2 = [NSArray arrayWithObject:@"jack"];
// 初始化多个数组元素,nil是数组元素结束的标记
NSArray *array3= [NSArray arrayWithObjects:@"jack",@"rose",nil];
// 快速创建数组 用@[];
NSArray *array4 = @[@"jack",@"rose",@"23423"];
array3.count : 数组元素个数
数组访问:
// 通过索引获取数组元素信息
[array3 objectAtIndex:1];
// 编译器特性,会自动转换为objectAtIndex
array3[0];
数组遍历:
Person *p = [[Person alloc] init];
NSArray *array = @[p,@"rose",@"jack"];
1、利用for循环进行循环遍历
for (int i = 0; i<array.count; i++)
{
NSLog(@"%@",array[i]);
}
2、利用for in 遍历,缺点是没有数组下标
for (id obj in array) // 每次从数组中获取一个元素给obj
{
// 找出obj元素在数组中的位置
NSUinteger i = [array indexOfObject:obj];
NSLog(@"%ld - %@",i,obj);
}
3、利用block快速遍历
[array enumerateObjectUsingBlock:
// 每遍历到一个元素,就会调用一次block
// 并且当前元素和索引位置当做参数传递给block
^(id obj, NSUinteger idx, BOOL *stop)
{ // *stop YES表示终止遍历数组
NSLog(@"%ld - %@",idx,obj);
}];
NSMutableArray
可变数组,只能存放OC对象,不能存放非OC对象
数组创建:
// 这个array数组可以在之后添加元素
NSMutableArray *array = [NSMutableArray array];
// 添加元素
[array addObject:[[Person alloc] init]];
[array addObject:@"jack"];
// 删除元素
// 删除所有数组元素
[array removeAllObjects];
// 删除指定的对象
[array removeObject:@"jack"]; // 根据数组元素删除
[array removeObjectAtIndex:2]; // 根据索引删除
错误写法:
// 数组不允许放空值
[array addObject:nil];
// 可变数组不能用不可变数组赋值,经典错误,调用了一个不可用方法
NSMutableArray *array = @[@"jack",@"rose"];
[array addObject:@"jim"]; // 系统调用的时候会转换成真实数据类型,不可变数组
NSSet
不可变集合,只能存放OC对象,不能存放非OC对象
集合创建:
// 这个s永远是空集合,需要在创建的时候进行初始化
NSSet
*s= [
NSSet
set];
// 初始化单个集合元素
NSSet
*s2= [
NSSet
setWithObject:@"jack"];
// 初始化多个
集合
元素,nil是
集合
元素结束的标记
NSSet
*s3= [
NSSet
setWithObjects:@"jack",@"rose",nil];
s3.count : 集合元素个数
集合访问:
// 随机拿出一个元素
NSString *str = [s3 anyObject];
NSLog(@"%@",str);
NSMutableSet
可变集合,只能存放OC对象,不能存放非OC对象
集合创建:
// 这个可变集合可以在之后添加元素
NSMutableSet *s= [NSMutableSet set];
// 添加元素
[s addObject:[[Person alloc] init]];
[s addObject:@"jack"];
// 删除元素
[s removeObject:@"jack"]; // 删除指定对象
[s removeAllObjects]; // 删除所有对象
NSSet和NSArray的对比
1> 共同点
* 都是集合,都能存放多个OC对象
* 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、struct、enum等 共同体)
* 本身都不可变,都有一个可变的子类
2> 不同点
* NSArray有顺序,NSSet没有顺序
NSDictionary
不可变字典,只能存放OC对象,不能存放非OC对象,以键值对形式存放数据
字典创建:
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
// 利用数组创建字典
NSArray *keys = @[@"name",@"address"];
NSArray *objects= @[@"jack",@"北京"];
NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:objects forKey:keys];
// 键值对形式存放多个元素,太啰嗦
NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:
@"jack",@"name",
@"北京",@"address",
@"12312",@"qq", nil
];
// 简洁明了符合我们开发习惯,建议用此种写法
NSDictionary *dict4 = @{
@"name" : @"jack",
@"address" : @"北京"
};
字典访问:
// 根据键名寻找对应的值
id obj = [dict4 objectForKey:@"name"]; // 取得jack
// 建议写法,类似于数组
id obj1 = dict[@"name"];
dict4
.count : 键值对的个数
NSMutableDictionary
可变字典,只能存放OC对象,不能存放非OC对象
NSMutableDictionary *dict= [
NSMutableDictionary d
ictionary
];
// 添加键值对
[
dict
setObject:@"jack" forKey:@"name"];
[
dict
setObject
:@"北京" forKey:@"address"];
// 多次给一个name赋值会覆盖之前的值
[
dict
setObject:@"rose" forKey:@"name"];
// 移除键值对
[dict removeObjectForKey:@"name"]; // 删除指定对象
错误写法:
// @{}表示不可变字典找不到setObject方法
NSMutableDictionary *dict = @{@"name" : @"jack"};
[dict setObject:@"rose" forKey:@"name"];
字典遍历:
NSDictionary *dict = @{@"name" : @"jack",@"qq" : @"12312"};
1、利用for循环进行循环遍历
NSArray *keys = [dict allKeys]; // 取得字典中的所有键
for (int i = 0; i<dict.count; i++)
{
NSString *key = keys[i];
NSString *object = dict[key];
NSLog(@"%@===%@",key, object);
}
2、利用block来进行遍历
[dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop) {
NSLog(@"%@===%@",key , obj);
}
];
集合总结:
1、NSArray\NSMutableArray
* 有序
* 快速创建(不可变):@[obj1,obj2];
* 快速访问元素: 数组名[i]
2、NSSet\NSMutableSet
* 无序
3、NSDictionary\NSMutableDictionary
* 无序
* 快速创建: @{key1 : value1, key2 : value2};
* 快速访问元素: 字典名[key];
NSNumber
把基本数据类型转换为Number类型
// 把double类型转换为number
NSNumber *n = [NSNumber numberWithDouble:10.5];
// 把number类型转换为基本数据类型
double d = [n doubleValue];
字符串和基本数据类型转换
int a = 20;
NSString *str = [NSString stringWithFormat:@"%d",a];
NSLog(@"%d", [str intValue]);
// 快速包装对象
将各种基本数据类型包装成NSNumber对象
@20; // 整数
@10.3; // 小数
@YES; // 布尔
@'A'; // 字符 NSNumber对象
@"A"; // NSString对象
// 将多个人的信息放在数组中,用NSNumber包装对象
NSArray *array = @{
@{@"name" : @"jack", @"age" : @20},
@{@"name" : @"rose", @"age" : @25},
@{@"name" : @"jim", @"age" : @27},
};
NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue.
NSNumber只能包装数值。
NSValue能包装任何对象:比如结构体、枚举等
// 结构体——>OC对象
CGPoint p = CGPointMake(10,10);
// 将结构体转为value对象
NSValue *value = [NSValue vauleWithPoint:p];
// 将value转为对应的结构体
[value pointValue];
//数组中存放包装后的结构体
NSArray *array = @[value];
NSDate
创建时间
// 默认打印格林尼治时间
NSDate *date = [NSDate date];
NSLog(@"%@",date);
// 返回date 5秒后的时间给date2
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
时间格式化
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 = @"2014/8/8 18:22";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy/MM/dd HH:mm";
NSDate *date = [formatter dateFromString:time];
NSLog(@"%@", date);