------- android培训、java培训、期待与您交流!
集合类的总结:
NSArray ArrayList
NSSet HashSet
NSDictionary HashMap
1.NSArray\NSMutableArray
有序
快速创建(不可变):@[obj1,obj2,obj3]
快速访问元素:数组名[i]
2.NSDictionary\NSMutableDictionary
无序
快速创建(不可变):@{key1:value1,key2:value2}
快速访问元素:字典名[key]
3.NSSet\NSMutableSet
无序
#import <Foundation/Foundation.h> int main() { NSArray *persons = @[ @{@"name":@"jack",@"qq":@"123",@"book":@[@"book1",@"book2"]}, @{@"name":@"rose",@"qq":@"1234"}, @{@"name":@"jim",@"qq":@"12345"} ]; //NSDictionary *jim = persons[2]; //取出一本书 NSString *book = persons[0][@"book"][1]; //取出书的数组 NSArray *books = persons[0][@"book"]; NSLog(@"%@",books); //先取出1位置对应的字典 //再取出字典种qq这个key对应的数据 NSLog(@"%@",persons[1][@"qq"]); return 0; } void use4(){ //字典是无序的 //字典不允许有相同的key,但允许有相同的value(Object) NSDictionary *dict = @{ @"address" : @"beijing", @"name" : @"jack", @"qq" : @"1231231"}; /* NSArray *keys = [dict allKeys]; for (int i=0; i<dict.count; i++) { NSString *key = keys[i]; NSString *object = dict[key]; NSLog(@"%@ - %@",key,object); } */ [dict enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop){ NSLog(@"%@-%@",key,obj); //若想遍历一次就停止: *stop = YES; } ]; } void use3(){ /*以下的方法是不行的,因为@{}方式,返回的是不可变的对象,不能给可变对象使用,因为没有set方法。 NSMutableDictionary *dict = @{@"name" : @"jack"}; [dict setObject : @"rose" forKey:@"name"]; */ } void use2(){ NSMutableDictionary *dict = [NSMutableDictionary dictionary]; //添加键值对 [dict setObject:@"jack" forKey:@"name"]; [dict setObject:@"beijing" forKey:@"address"]; [dict setObject:@"rose" forKey:@"name"];//当再次给key赋值,会覆盖先前的值 //删除 //[dict removeObjectForKey(id)]; NSString *str = dict[@"name"]; NSLog(@"%@",str); //NSLog(@"%@",dict);//字典打印方式 //NSLog(@"%@",@[@"jack",@"rose"]);//数组打印方式 } void use(){ /* 字典: key ---> value 索引 ---> 文字内容 里面存储的内容都是键值对 */ //第一种 //NSDictionary *dict=[NSDictionary dictionaryWithObject:@"jack" forKey:@"name"]; //第二种 /* NSArray *keys = @[@"name",@"address"]; NSArray *objects = @[@"jack",@"北京"]; NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; */ //第三种 /* NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: @"jack",@"name", @"beijing",@"address", @"234234",@"qq",nil]; */ NSDictionary *dict = @{@"name" : @"jack",@"address" : @"beijing:"}; //id obj = [dict objectForKey:@"name"]; id obj = dict[@"name"]; NSLog(@"%@",obj); NSLog(@"%ld",dict.count);//返回键值对的个数 }
NSNumber_NSValue
#import <Foundation/Foundation.h> int main() { NSDate *date = [NSDate date]; //打印出的时候是0时区的时间,北京是东8区 NSLog(@"%@",date); //创建一个比另一个时间晚多少的时间方法: NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];//5秒,不是毫秒 //timeInterval 就是double类型 //返回从1970开始走过的秒数 NSTimeInterval seconds = [date2 timeIntervalSince1970]; //[date2 timeIntervalSinceNow]; //日期格式化: NSDate *date3 = [NSDate date]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; //y年 M月 d日 H(24)时 h(12)时 m分 s秒 formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; NSString *str = [formatter stringFromDate:date]; NSLog(@"%@",str); //把字符串格式--->日期格式 NSString *time2 = @"2011^09^12 18:21"; NSDateFormatter *formatter2 = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyy^MM^dd HH:mm"; NSDate *date4 = [formatter dateFromString:time2]; NSLog(@"%@",date4); return 0 ; } void testNSDate(){ } void testNSValue(){ //NSNumber之所以能包装基本类型数据为对象,是因为继承了NSValue //NSNumber只能包装数字 //NSValue可以包装任何类型 //OC数组种不能存放结构体,此时需要NSValue包装成Value对象 //结构体--->OC对象 CGPoint p = CGPointMake(10, 10); //结构体--->Value对象 NSValue *value = [NSValue valueWithPoint:p]; //Value对象--->结构体 NSArray *array = @[value]; } void testNSNumber2(){ //@20 将20包装成一个NSNumber对象 @[ @{@"name":@"jack",@"age":@20}, @{@"name":@"rose",@"age":@10.5}, @{@"name":@"jim",@"age":[NSNumber numberWithInt:20]} ]; //将各种基本数据类型包装成NSNumber对象 @10.5; @YES; @'A';//NSNumber对象 @"A";//NSString对象 //将age变量包装成NSNumber对象 int age = 100; @(age); //[NSNumber numberWithInt:age]; NSNumber *n = [NSNumber numberWithDouble:10.5]; int d = [n doubleValue];//double类型 //一种基本数据类型转换形式 int a = 20; NSString *str = [NSString stringWithFormat:@"%d",a]; int d2 = [str intValue]; //另一种基本数据类型转换形式 NSLog(@"%d",[@"23" intValue]); NSLog(@"%d",d2); } void testNSNumber(){ NSNumber *num = [NSNumber numberWithInt:10]; NSDictionary *dict = @{ @"name" : @"jack", @"age" : num }; NSNumber *num2 = dict[@"age"]; int a = [num2 intValue]; NSLog(@"%d",a); }
NSObject常用方法:
判断是否为aClass或者aClass的子类的实例 - (BOOL)isKindOfClass:(Class)aClass 判断是否为aClass的实例(不包括aClass的子类) - (BOOL)isMemberOfClass:(Class)aClass 间接调用 [stu performSelector:@selector(test1)]; [stu performSelector:@selector(test2:) withObject:@"abc"]; 延迟2秒后调用test2:方法 [stu performSelector:@selector(test2:) withObject:@"abc" afterDelay:2];
反射:
//类名的反射: NSString *str = @"Person"; Class class = NSClassFromString(str); Person *person = [[class alloc] init]; //Class变成字符串 NSString *name = NSStringFromClass([Person class]); //方法的反射 NSString *method = @"test"; SEL selector = NSSelectorFromString(method); [person performSelector:selector]; //将SEL转换为字符串 NSString *selectorName = NSStringFromSelector(selector);