------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、NSMutableArray
NSMutableArray是可变数组,它继承自NSArray
NSMutableArray常用的操作有:
创建可变数组时:要以nil结束
<span style="font-size:18px;">NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose",@"jim",nil] ; 以nil结束</span>
向数组中添加元素:
<span style="font-size:18px;">NSMutableArray *array = [NSMutableArray array] ;
[array addObject:[[person alloc] init]] ;
[array addObject:@"jack"] ;</span>
注意:不能添加nil值得元素,因为nil是数组结束的标识。
错误的写法:
<span style="font-size:18px;">[array addObject:nil] ; // 这是错误的写法</span>
删除所有元素:
<span style="font-size:18px;">[array removeAllObjects]; //删除所有的元素</span>
删除最后一个元素:
<span style="font-size:18px;">[array removelastObject] ;</span>
<span style="font-size:18px;">[array removeObject:@"jack"];</span>
按照索引删除元素:
<span style="font-size:18px;">[array removeObjectAtIndex:0] ;</span>
注意:@[ ]只可创建不可变数组
如下:
<span style="font-size:18px;">NSMutableArray *array = @[@"jack", @"rose"] ; 错误写法
</span>
右边产生了一个NSArray对象,因此会产生类型不匹配的警告。
二、 NSSet 和NSMutableSet
1.NSSet
NSSet 也是一种集合类,
它与NSArray最大的区别是:
NSArray中的元素是有序的,因此NSArray中有索引的概念
NSSet 中的元素是没有顺序的。
创建一个NSSet:
<span style="font-size:18px;">NSSet *s = [NSSet set] ; // 永远为空的NSSet
NSSet *s2 = [NSSet setWitchObjects:@"jack",@"rose",@"jack2",@"jack3", nil] ;</span>
随机取出一个元素:
<span style="font-size:18px;">NSString *str = [s2 anyObject];
NSLog(@"%@", str) ;</span>
2.NSMutableSet
创建NSMutableSet对象
<span style="font-size:18px;">NSMutableSet *s = [NSmutableSet set] ;</span>
添加元素:
<span style="font-size:18px;">[s addObject: @"hllo"];
</span>
删除元素:
<span style="font-size:18px;">[s removeObject:(id)] ; // 删除特定元素
[s removeAllObject]; // 删除所有元素</span>
NSSet 和NSArray 的对比
1> 共同点
* 都是集合,都能存放多个OC对象
* 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
* 本身都不可变,都有一个可变的子类
2> 不同点
* NSArray有顺序,NSSet没有顺序
三、NSDictionary和NSMutableDictionary
1. NSDictionary常被称为字典,存的都是键值对(不可变)。
创建一个NSDictionary对象
键值对key:@"name":@"jack"
方法1:
<span style="font-size:18px;">方法 :dictionaryWithObject: forKey:
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"] ;</span>
方法2:
有多个键值对时,可以用两个数组分别存放Keys和values,
利用方法:dictionaryWithObjects: forKeys:
<span style="font-size:18px;">NSArray *keys = @[@"name", @"address"] ;
NSArray *objs = @[@"jack",@"北京"] ;
NSDictionary *dict = [NSDictionary dictionaryWithObjects:objs forKey:keys] ;</span>
方法3:
<span style="font-size:18px;">NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"jack",@"name",@"北京",@"address",@"123456",@"QQ", nil nil nil]; //注意要加 nil 来结束</span>
利用Xcode编译器特性,快速创建:@{}
如下:
<span style="font-size:18px;">NSDictionary *dict = @{@"name":@"jack",@"address":@"北京"} ;</span>
取出一个元素
<span style="font-size:18px;"> id obj = [dict objectForKey:"name"];// 取出name对应的值
NSLog (@"%@", obj) ; // jack</span>
<span style="font-size:18px;">obj = dict[@"name"] ;
NSLog(@"%@",obj); // jack</span>
<span style="font-size:18px;">NSLog (@"%ld",dict.count);</span>
注意:
字典不允许有相同的key,可以有相同的value(Object)
2. NSMutableDictionary(可变)
创建一个NSMutableDictionary:
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
添加键值对:setObject方法
[dict setObject:@"jack" forKey:@"name"] ;
[dict setObject:@"北京" forKey:@"address"] ;
注意:
给存在的Key赋值,就值被覆盖
例如:
例如:
[dict setObject:@"rose" forKey:@"name"]; // 给相同Key赋值时,旧值会覆盖,此时的 name 为 rose
移除键值对:
[dict removeObjectForKeys:@"name"] ;
数组和字典的打印:
NSLog(@"%@",@[@"jack",@"rose"]); // 数组
NSLog (@"%@",dict) ; // 字典
@{}创建不可变的字典时注意以下错误写法:
// 错误的写法
NSMutableDictionary *dict = @{@"name":@"jack"}
3.字典的遍历
NSDictionary *dict = @{@"name":@"jack",@"address":@"北京",@"qq":@"12345678"};
利用block方法:
int i = 0 ;
[dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj , BOOLBOOL *stop)
{
NSLog(@"%@=%@", key , obj);
/*可以停止打印
if(i==1)
{
*stop = YES;
}
*/
} ] ;
字典的数组:
<span style="font-size:14px;">NSArray *persons = @[
@{@"name":@"jack",@"qq":@"23456789"},
@{@"name":@"rose",@"qq":@"22334455"},
@{@"name":@"jam",@"qq":@"54321"}];</span>
取出其中的某个字典:
NSDictionary *jam = person[2];
NSLog(@"%@",jam);
NSLog(@"%@",persons[1][@"qq"]);
四、 NSNumber和NSValue
使用NSNumberNSValue来包装基本数据类型,让它们转换为对象类型的数据。
1. NSNumber
1. NSNumber
将BOOL、char 、int、float、double、NSInteger类型的数据包装成NSNumber类型的对象
如下:
将对象转为基本类型,如下:
NSNumber *c = [NSNumber numberWithChar:'A'] ;
NSNumber *i = [NSNumber numberWithInt:10] ;
将对象转为基本类型,如下:
[c charValue];
[i intValue];
将基本类型转成字符串
NSString *str = [NSString stringWithFormat:@"%d",a] ;
将字符串转为基本类型
[str intValue];
利用编译器特性:
NSNumber *c = @'A' ; // 将A包装成对象
NSNumber *i = @10; // 将10包装成对象
还可以这样包装数据:
例如:将age变量包装成NSNumber
int age = 10 ;
NSNumber *a = @(age);
对NSNumber类型的分析:
NSNumber之所以能包装数据,是因为继承了NSValue,
NSNumber只能包装数字类型,若要包装结构体就得使用NSValue。
使用NSValue将结构体包装成NSValue类型的OC 对象:
将结构体包装成OC对象:
CGPoint p = CGPointMake(10,10);
将结构体转为NSValue:
NSValue *value = [NSValue valueWithPoint:p] ;
将value转为对应的结构体:
[value pointvalue];
五、NSDate类
创建一个时间对象:
例如:当前的时间
NSDate *date = [NSDate date] ; // 默认为当前的时间
打印时间:
NSLog(@"%@",date) ;// 打印的为0时区的时间
创建一个时间对象:比date晚五秒种
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date] ;
获取从2000年1月一日凌晨走过的秒数:
NSTimeInterval seconds = [date2 timeIntervalSince2000] ; // 为double类型
获取date与当前时间的间隔:单位:秒
[date2 timeIntervalSinceNow] ;
日期格式化的使用:
1.将date对象转化为字符串:
void dateToString()
{
NSDate *date = [NSDate date];
// 日期格式化类
NSDateFormat *formatter = [[NSDateFormatter alloc] init] ;
// H (24小时制) h (12小时制)
// y 年 M月 d 日
formatter.dateFormat = @"yyyy - MM-dd HH:mm:ss" ;
NSString *strDate =[formatter stringFromDate:date] ;
NSLog(@"%@", strDate) ;
}
2. 将字符串转为日期:
void stringToDate()
{
NSString *time = @"2015/01/12 03:30" ;
NSDateFromatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyy/MM/dd HH:mm";
NSDate *date = {formatter dateFormString:time} ;
NSLog(@"%@",date);
}