黑马程序员——IOS基础——Foundation框架——字典、集合类、NSNumber/NSValue、NSObject、反射

-------  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);




-------  android培训 java培训 、期待与您交流!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值