黑馬程序員——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培訓、期待與您交流!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章